#!/bin/bash
set -eu
### --help Info: Восстановление системы из бэкапа
### --help Info: Перед восстановлением рекомендуем создать бэкап системы. TODO
### --help Usage: eva_restore.sh [cmd] <name>
### --help Example: eva_restore.sh list
### --help Example: eva_restore.sh restore evadb_backup.latest

. /opt/fox_utils/crab_sys.sh

if [ "${1:---help}" = "--help" ]; then
	sys::usage "$@"
fi

sys::arg_parse "$@"

declare -A BACKUP_DIR
BACKUP_DIR="/opt/eva-app/backup"
declare CMD="$ARG_1"

do_list() {
	local file_name
	for file_name in $(ls "${BACKUP_DIR}"); do
		echo "$file_name"
	done
	return 0
}


do_restore() {
	local backup_name db backup_dir

	if [[ $ARG_2 == */* ]]; then
		backup_dir="$ARG_2"
		backup_name="${ARG_2##*/}"
	else
		backup_name="$ARG_2"
		backup_dir="$BACKUP_DIR/$backup_name"
	fi
	db=$(echo $backup_name | cut -d '_' -f 1)
	echo "Останавливаем сервисы"
	/opt/bin/services stop

	echo "Восстановим Базы Данных"
	/etc/init.d/postgresql start
	echo "Сделаем сначала текущий бекап"
	/opt/bin/pg_backup backup
	echo "Загрузим БД $backup_name"
	# drop database WITH FORCE - not in v13
	psql -U postgres postgres -c "DROP DATABASE IF EXISTS $db" -c "CREATE DATABASE $db"
	pg_restore -U postgres --clean --if-exists --exit-on-error \
		-d "$db" "$backup_dir"

	echo "Запускаю сервисы"
	/opt/bin/services stop || true
	echo "Применим конфигурацию."
	/opt/bin/eva_configure
	/opt/bin/services start

	return 0
}


main() {
	"do_${CMD}"
	return 0
}

# Иногда при запуске скрипта проставлялись неправильные права на пид файлы.
# TODO выставлять в init.d скриптах
umask 0007
main "$@"

exit 0
