#!/bin/bash

# Skrypt tworzy wersję test
   
      DATE=$(date +"%Y%m%d")
	  DST="/home/backup/db"
	  ENV_PROD="edokumenty"
	  ENV_TEST="test"
	  EXT_URL="localhost"
	  PSQL_OPTIONS="-p 5432"
	  LOG_BACKUP="/var/log/backup_edokumenty"
	  OPTIONS="--force --ignore-errors --delete --delete-excluded \
				   --exclude-from=/etc/backup/exclude_test.conf -a"
    
	  DATESTART=$(date +"%Y-%m-%d %H:%M:%S")

	  mkdir -p ${LOG_BACKUP}

	echo "Start: Odtworzenie wersji ${ENV_TEST} - ${DATESTART}"  >> ${LOG_BACKUP}/restore_${ENV_TEST}_version.log  

		#Roszerzenie logowania o informacje o błędach
		#su - postgres -c "psql ${PSQL_OPTIONS} -c \"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '${ENV_TEST}' AND pid <> pg_backend_pid();\""
		#su - postgres -c "dropdb ${PSQL_OPTIONS} ${ENV_TEST}"
		#su - postgres -c "createdb ${PSQL_OPTIONS} -O edokumenty ${ENV_TEST}"
		#su - postgres -c "gunzip -c $DST/${ENV_PROD}_${DATE}.sql.gz | psql ${PSQL_OPTIONS} ${ENV_TEST}"

	    if su - postgres -c "psql -lqt ${PSQL_OPTIONS}  | cut -d \| -f 1 | grep -qw ${ENV_TEST}"; then
            su - postgres -c "psql ${PSQL_OPTIONS}  -c \"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '${ENV_TEST}' AND pid <> pg_backend_pid();\"" | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
            echo "Baza ${ENV_TEST} już istnieje – próba usunięcia..." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
        	if su - postgres -c "dropdb ${PSQL_OPTIONS} ${ENV_TEST}"; then
                echo "Baza została usunięta, tworzę nową i odtwarzam dane." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
                su - postgres -c "createdb ${PSQL_OPTIONS} -O edokumenty ${ENV_TEST}"
                su - postgres -c "gunzip -c $DST/${ENV_PROD}_${DATE}.sql.gz | psql ${PSQL_OPTIONS} ${ENV_TEST}"
            else
                echo "Nie udało się usunąć bazy ${ENV_TEST} – przerwano operację." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
                DATEENDERROR=$(date +"%Y-%m-%d %H:%M")
                echo "Koniec odtworzenia wersji ${ENV_TEST} - ONLY BASE ${DATEENDERROR}" >> ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
                echo " " | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
                exit 1
            fi
        else
            echo "Baza ${ENV_TEST} nie istnieje – tworzę nową i odtwarzam dane." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
            su - postgres -c "createdb ${PSQL_OPTIONS} -O edokumenty ${ENV_TEST}"
            su - postgres -c "gunzip -c $DST/${ENV_PROD}_${DATE}.sql.gz | psql ${PSQL_OPTIONS} ${ENV_TEST}"
        fi	

		#Usunięcie konta ePUAP
		echo "Usunęcie konfiguracji ePUAP." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
		sudo -u postgres -H -- psql ${PSQL_OPTIONS} -d ${ENV_TEST} -c "UPDATE epuap.entities SET is_del = true;"

		#Usunięcie konfiguracji
		echo "Usunięcie konfiguraji dla statusów." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
		sudo -u postgres -H -- psql ${PSQL_OPTIONS} -d ${ENV_TEST} -c "delete from user_sys_conf where objnam ~* 'simpletable2/MOD_STATUS_LIST';"

		#Usunięcie adresów email z testowego środowiska
		echo "Usunięcie adresów email z testowego środowiska." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
		sudo -u postgres -H -- psql ${PSQL_OPTIONS} -d ${ENV_TEST} -c "UPDATE users SET e_mail = NULL;"

		#Kopiowanie plików z produkcji do testu
		echo "Aktualizuję kod aplikacji." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
		rsync $OPTIONS /home/${ENV_PROD}/public_html/ /home/${ENV_TEST}/public_html/
		rsync $OPTIONS /home/${ENV_PROD}/etc/ /home/${ENV_TEST}/etc/
		rsync $OPTIONS /home/${ENV_PROD}/bin/ /home/${ENV_TEST}/bin/
		rsync $OPTIONS /home/${ENV_PROD}/lib/ /home/${ENV_TEST}/lib/
		rsync $OPTIONS /home/${ENV_PROD}/src/ /home/${ENV_TEST}/src/
		rsync $OPTIONS /home/${ENV_PROD}/vendor/ /home/${ENV_TEST}/vendor/
																		       
		#Zmiana konfiguracji środowiska
		echo "Zmiana konfiguracji dla środowiska." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
		sed -i -e "s/dbname=${ENV_PROD}/dbname=${ENV_TEST}/g" /home/${ENV_TEST}/public_html/apps/edokumenty/config.inc
		sed -i -e "s/define('ROBO_VERSION', FALSE);/define('ROBO_VERSION', 'WERSJA ${ENV_TEST} AUTO');/g" /home/${ENV_TEST}/public_html/apps/edokumenty/config.inc
		sed -i -e "s/define('APPLICATION_NAME', 'Symfonia eDokumenty')/define('APPLICATION_NAME', 'WERSJA ${ENV_TEST} Symfonia eDokumenty')/g" /home/${ENV_TEST}/public_html/apps/edokumenty/config.inc
		sed -i -e "s/define('EXT_ACTIONS_ENGINE_URL', 'http:\/\/${EXT_URL}')/define('EXT_ACTIONS_ENGINE_URL', 'http:\/\/${EXT_URL}\/${ENV_TEST}')/g" /home/${ENV_TEST}/public_html/apps/edokumenty/config.inc
		sed -i -e "s/owner = \"${ENV_PROD}\"/owner = \"${ENV_TEST}\"/g" /home/${ENV_TEST}/etc/env.toml
		sed -i -e "s/data_group = \"${ENV_PROD}\"/data_group = \"${ENV_TEST}\"/g" /home/${ENV_TEST}/etc/env.toml
		
		#Aktualizacja uprawnień dla środowiska 
		echo "Poprawa uprawnień." | tee -a ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
		cd /home/${ENV_TEST}
		./bin/fixperms.sh
		
	  DATEEND=$(date +"%Y-%m-%d %H:%M:%S")
	
	echo "Koniec: Odtworzenia wersji ${ENV_TEST} - ${DATEEND}" >> ${LOG_BACKUP}/restore_${ENV_TEST}_version.log
	echo " " >> ${LOG_BACKUP}/restore_${ENV_TEST}_version.log