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

# sys::arg_parse "$@"

source /opt/CONFIG

patch_config() {
	if ! grep -q "EMAIL_USE_TLS=" /opt/CONFIG; then
		/opt/fox_utils/crab_conf set EMAIL_USE_TLS "0" /opt/CONFIG
	fi
	return 0
}

set -x
patch_config
/opt/bin/eva_init.sh
echo "Примерение патчей обновления update_patch"

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 -

apply_hotfix(){
	local patch_hotfix_marker version
	if [ -f "/opt/bin/update_scripts/patch_hotfix.sh" ]; then
		# https://bcrm.carbonsoft.ru/desk/Task/CLD-1625032932
		# Контроль версии (чтобы для всех выполнилась один раз).
		# Возможно это стоит удалить, когда все обновятся на 02.23.
		patch_hotfix_marker="/mnt/shared/config/eva-app/patch_hotfix_v02_23"
		[[ -f "$patch_hotfix_marker" ]] && return 0
		# output: 02.20.01.0660
		version="$(</opt/eva_version)"
		# output: 20
		version="${version:3:2}"
		((version < 23)) && return 0
		/opt/bin/update_scripts/patch_hotfix.sh
		date +%s > "$patch_hotfix_marker"
	fi
	return 0
}

echo "Применяем миграции БД"
(
	cd "/opt/eva-app"
	for head in $ALEMBIC_HEADS; do
		alembic upgrade $head
	done
	apply_hotfix
	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
