#!/usr/bin/env bash
set -euo pipefail

########################################
# KONFIG (din opsætning)
########################################
MAGENTO_PROD_ROOT="/home/imuser/public_html/sengetrolden.dk"
MAGENTO_TEST_ROOT="/home/imuser/public_html/test.sengetrolden.dk"

DB_HOST="dbinstance-1.csuenncepojt.eu-north-1.rds.amazonaws.com"
DB_ADMIN_USER="admin"
DB_ADMIN_PASS='Hagbard#11'

DB_PROD="sengetrolden26_db"
DB_TEST="test_sengetrolden26_db"

GRANT_USER="sengetrolden26"
GRANT_HOST="172.31.36.210"   # stram evt. til specifik host senere

PROD_URL="https://sengetrolden.dk"
TEST_URL="https://test.sengetrolden.dk"

PREFIX="sengtest"
OWNER="imuser:imuser"

REDIS0="13"    #Session
REDIS1="14"    #Cache DB	
REDIS2="15"    #Page_Cache DB
########################################
# HELPERS
########################################
log() { echo "[$(date '+%F %T')] $*"; }

mysql_admin() {
  mysql -h "$DB_HOST" -u "$DB_ADMIN_USER" -p"$DB_ADMIN_PASS" "$@"
}

cleanup_on_error() {
  log "FEJL opstod. Husk at genetablere drift (cron + maintenance off)..."
  if [[ -x "${MAGENTO_PROD_ROOT}/bin/magento" ]]; then
    cd "$MAGENTO_PROD_ROOT" || true
  fi
  if [[ -x "${MAGENTO_TEST_ROOT}/bin/magento" ]]; then
    cd "$MAGENTO_TEST_ROOT" || true
  fi
}
trap cleanup_on_error ERR

########################################
# SANITY CHECKS
########################################
if [[ ! -x "${MAGENTO_PROD_ROOT}/bin/magento" ]]; then
  echo "FINDER IKKE bin/magento i PROD: ${MAGENTO_PROD_ROOT}"
  exit 1
fi

if [[ ! -d "${MAGENTO_TEST_ROOT}" ]]; then
  echo "FINDER IKKE TEST-ROOT: ${MAGENTO_TEST_ROOT}"
  exit 1
fi

########################################
# DB: drop/opret test DB
########################################
log "Dropper test database (hvis den findes): $DB_TEST"
mysql_admin -e "DROP DATABASE IF EXISTS \`${DB_TEST}\`;"

log "Opretter test database: $DB_TEST"
mysql_admin -e "CREATE DATABASE \`${DB_TEST}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

########################################
# DB: dump uden triggers/routines/events og import til test
########################################
    log "Kopierer DB $DB_PROD -> $DB_TEST (uden triggers/routines/events pga RDS privileges)..."
mysqldump \
  -h "$DB_HOST" -u "$DB_ADMIN_USER" -p"$DB_ADMIN_PASS" \
  --single-transaction \
  --quick \
  --skip-triggers \
  --routines=false \
  --events=false \
  "$DB_PROD" \
| mysql_admin "$DB_TEST"

########################################
# DB: ret base-url i core_config_data i test DB
########################################
log "Opdaterer core_config_data URLs i test-databasen"
mysql_admin "$DB_TEST" -e "
UPDATE core_config_data
SET value = REPLACE(value, '${PROD_URL}', '${TEST_URL}')
WHERE value LIKE '%${PROD_URL}%';
UPDATE core_config_data
SET value = '${PREFIX}'
WHERE path = 'catalog/search/opensearch_index_prefix';
"

########################################
# DB: grant user til test DB
########################################
log "Giver ${GRANT_USER} alle rettigheder på ${DB_TEST}"
mysql_admin -e "
GRANT ALL PRIVILEGES ON \`${DB_TEST}\`.* TO '${GRANT_USER}'@'${GRANT_HOST}';
FLUSH PRIVILEGES;
"


########################################
# regenerér triggers via setup:upgrade + reindex
########################################
if [[ ! -x "${MAGENTO_TEST_ROOT}/bin/magento" ]]; then
  log "ADVARSEL: Kan ikke finde ${MAGENTO_TEST_ROOT}/bin/magento. Kan ikke regenerere triggers automatisk."
  log "Tjek at test-installationen er komplet."
  exit 1
else
  cd "$MAGENTO_TEST_ROOT"

  log "Kører setup:upgrade i TEST (genskaber manglende triggers/_cl setup)..."
  php -d memory_limit=2G -d opcache.enable_cli=0 bin/magento setup:upgrade

  log "Kompilerer setup"
  php -d memory_limit=2G -d opcache.enable_cli=0 bin/magento setup:di:compile
  log "Genererer statisk indhold"
  php -d memory_limit=2G -d opcache.enable_cli=0 bin/magento setup:static-content:deploy -f da_DK en_US
  log "Tømmer cache..."
  php -d memory_limit=2G -d opcache.enable_cli=0 bin/magento cache:flush

  log "Reindex i TEST (sikrer konsistens efter trigger-tab)..."
  php -d memory_limit=2G -d opcache.enable_cli=0 bin/magento indexer:reindex

  log "Cache flush i TEST..."
  bin/magento cache:flush

  
fi
########################################
# Change Ownership : Ret ejerskab til imuser:imuser på alle filer
########################################
  chown -R "$OWNER" "$MAGENTO_TEST_ROOT"

########################################
# SLet logfiler
########################################
  rm -f "$MAGENTO_TEST_ROOT"/var/log/*.log

########################################
# Clean redis
########################################
  
  redis-cli -h 127.0.0.1 -p 6379 -n "$REDIS0" FLUSHDB
  redis-cli -h 127.0.0.1 -p 6379 -n "$REDIS1" FLUSHDB
  redis-cli -h 127.0.0.1 -p 6379 -n "$REDIS2" FLUSHDB


trap - ERR
log "Færdig ✅"
