#!/bin/bash
# Restaura un backup de producción (.tar.gz) en el MySQL de MISNUMEROS (sandbox).
# Se ejecuta EN misnumeros, mandado por stdin desde "EJECUTAR RESPALDO.bat":
#   ssh forge@134.122.125.132 "bash -s -- <base> <ruta_tar_gz>" < restaurar_en_sandbox.sh
# Credenciales: las del .env de misnumeros (DB_HOST / DB_PORT / DB_USERNAME / DB_PASSWORD).

DB="$1"
TAR="$2"
APP="/home/forge/misnumeros.com.ar"

# Solo dbtaxes o bases de tenants (db20-12345678-9). Nunca psp: en misnumeros vive el staging de Bind.
if ! [[ "$DB" =~ ^(dbtaxes|db[0-9]{2}-[0-9]{8}-[0-9])$ ]]; then
    echo "ERROR: base no permitida en el sandbox: '$DB'" >&2
    exit 1
fi
if [ ! -f "$TAR" ]; then
    echo "ERROR: no existe el archivo $TAR" >&2
    exit 1
fi

cd "$APP" || { echo "ERROR: no existe $APP" >&2; exit 1; }

envv() { grep -E "^$1=" .env | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'" | tr -d '\r'; }
H=$(envv DB_HOST); P=$(envv DB_PORT); U=$(envv DB_USERNAME); PW=$(envv DB_PASSWORD)
P=${P:-3306}

# PROTECCIÓN: si el .env de misnumeros apuntara a un MySQL de PRODUCCIÓN, se aborta
# antes de tocar nada (DROP/CREATE/import/update). Lista = hosts de producción del .bat.
for PROD in 137.184.158.50 10.136.92.193 10.136.92.187 68.183.22.193 10.136.92.186 157.230.62.29 \
            10.136.84.143 104.248.122.179 10.136.92.188 143.198.173.183 10.136.92.189 206.189.188.190 \
            10.136.92.190 68.183.123.45 10.136.92.191 159.223.162.47 134.209.208.210 10.136.21.165; do
    if [ "$H" = "$PROD" ]; then
        echo "ERROR: DB_HOST de misnumeros ($H) es un servidor de PRODUCCIÓN. Abortado, no se tocó nada." >&2
        exit 1
    fi
done
echo "Destino MySQL: host='${H:-contenedor local}' puerto=$P (.env de $APP)"

# Cliente mysql del host; si no hay, el del contenedor Docker de MySQL.
CONT=""
if ! command -v mysql >/dev/null 2>&1; then
    CONT=$(docker ps --format '{{.Names}}' 2>/dev/null | grep -i mysql | head -1)
    if [ -z "$CONT" ]; then
        echo "ERROR: no hay cliente mysql ni contenedor MySQL en este servidor" >&2
        exit 1
    fi
fi

myq() {
    if [ -n "$CONT" ]; then
        docker exec -i -e MYSQL_PWD="$PW" "$CONT" mysql -u"$U" "$@"
    else
        MYSQL_PWD="$PW" mysql -h "$H" -P "$P" -u"$U" "$@"
    fi
}

WORK="/tmp/sandbox_restore_$$"
rm -rf "$WORK"; mkdir -p "$WORK"
trap 'rm -rf "$WORK"; rm -f "$TAR"' EXIT

echo "📦 Descomprimiendo..."
tar -xzf "$TAR" -C "$WORK" || { echo "ERROR: falló la descompresión" >&2; exit 1; }
SQL=$(find "$WORK" -name "$DB.sql" | head -1)
[ -n "$SQL" ] || { echo "ERROR: no se encontró $DB.sql dentro del backup" >&2; exit 1; }

if [ "$DB" = "dbtaxes" ]; then
    # dbtaxes es la base de la propia app: no se hace DROP DATABASE, el dump trae DROP TABLE IF EXISTS.
    echo "♻ Importando sobre dbtaxes (en uso)..."
else
    echo "🗑️ Recreando la base $DB..."
    myq -e "DROP DATABASE IF EXISTS \`$DB\`; CREATE DATABASE \`$DB\`;" || { echo "ERROR: no se pudo recrear $DB" >&2; exit 1; }
    echo "♻ Importando $DB..."
fi

myq --force "$DB" < "$SQL" || { echo "ERROR: falló la importación" >&2; exit 1; }

if [ "$DB" = "dbtaxes" ]; then
    echo "🔧 Ajustando hosts de tenants al MySQL del sandbox..."
    myq dbtaxes -e "update tdbabuelas set tdbabuelas_host_id = 1;"
fi

echo "✅ $DB restaurada en misnumeros."
