#!/bin/bash
set -eu
### --help Info: Примерение патчей обновления update_patch
### --help Usage:
### --help Example:
. /opt/fox_utils/crab_sys.sh

# sys::arg_parse "$@"

source /opt/CONFIG

set -x
/opt/bin/eva_init.sh
echo "Примерение патчей обновления update_patch"
echo "Копируем последнюю версию патчей"
find /opt/eva-app/patch/ -type f ! -name '*.pyc' | while read -r fp; do
	f="${fp##*/}"
	echo "/mnt/update_patch/patch/$f" "/opt/eva-app/patch/$f"
	cp -a "/mnt/update_patch/patch/$f" "/opt/eva-app/patch/$f"
done
echo "Запускаем сервисы БД"
if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
	/etc/init.d/postgresql start
fi
if [ "${REDIS_SERVER_ENABLED:-TRUE}" = 'TRUE' ]; then
	/etc/init.d/redis-server start
fi

# Патч переименовывания СУБД
# Если БД внешняя - ренейм должен сделать админ
# Т.к. делаем сразу в бранче devel, нам нужно поддерживать rename  в обе стороны
if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
	cur_db_name='evadb'
	old_db_name='evacrmdb'
	if grep -q 'postgres@/evacrmdb' /opt/eva-app/common/config.py; then
		cur_db_name='evacrmdb'
		old_db_name='evadb'
	fi
	# skip strongbash034
	if ! psql -U postgres -ltq | cut -d \| -f 1 | grep -q "$cur_db_name"; then
		echo "Запускаем переименование СУБД $old_db_name -> $cur_db_name"
		psql -U postgres -ltq
		psql -U postgres -c "ALTER DATABASE ${old_db_name} RENAME TO ${cur_db_name};"
	fi
fi

# Для alembic - получаем текущие хеды патч-версии, но копируем все патчи из таргета
# т.к. БД может быть дальше патч-версии из-за смены бранча
cd "/opt/eva-app"
set -o pipefail
# skip strongbash034
declare ALEMBIC_HEADS="$(alembic heads | cut -d ' ' -f 1)"
set +o pipefail
cd -
cp -a /mnt/update_patch/alembic-versions/* /opt/eva-app/alembic/versions/
# find /opt/eva-app/alembic/versions/ -type f ! -name '*.pyc' | while read -r fp; do
#	f="${fp##*/}"
#	echo "/mnt/update_patch/alembic-versions/$f" "/opt/eva-app/alembic/versions/$f"
#	cp -a "/mnt/update_patch/alembic-versions/$f" "/opt/eva-app/alembic/versions/$f"
# done

echo "Применяем миграции БД"
(
	cd "/opt/eva-app"
	for head in $ALEMBIC_HEADS; do
		alembic upgrade $head
	done
	python3 manage.py patch
)
echo "Сохраняем версию образа Eva в БД"
(
	cd "/opt/eva-app"
	python3 manage.py save_version_to_db
)
if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
	/etc/init.d/postgresql stop
fi
if [ "${REDIS_SERVER_ENABLED:-TRUE}" = 'TRUE' ]; then
	/etc/init.d/redis-server stop
fi
/opt/bin/services stop || true
exit 0
