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

APP_ROOT="${1:-/home/iotcuboc/pyme}"
PAQUETE="$(cd "$(dirname "$0")" && pwd)"
MARCA="$(date +%Y%m%d_%H%M%S)"
RESPALDO="$APP_ROOT/respaldos/smtp_recuperacion_v5_1_$MARCA"
CONFIG="$APP_ROOT/config/mail.php"
SERVICIO="$APP_ROOT/app/includes/mail_service.php"
RECUPERAR="$APP_ROOT/public/recuperar_password_v3.php"

for requerido in "$APP_ROOT/vendor/autoload.php" "$RECUPERAR" "$APP_ROOT/public/restablecer_password_v3.php" "$APP_ROOT/config/db.php"; do
  if [[ ! -f "$requerido" ]]; then echo "ERROR: falta $requerido" >&2; exit 1; fi
done
php -r 'require $argv[1]; exit(class_exists("PHPMailer\\PHPMailer\\PHPMailer") ? 0 : 1);' "$APP_ROOT/vendor/autoload.php"
for archivo in "$PAQUETE/app/includes/mail_service.php" "$PAQUETE/paso/crear_mail_config.php" "$PAQUETE/paso/actualizar_recuperacion.php" "$PAQUETE/paso/probar_smtp.php"; do php -l "$archivo" >/dev/null; done

mkdir -p "$RESPALDO/config" "$RESPALDO/app/includes" "$RESPALDO/public" "$RESPALDO/retirados" "$APP_ROOT/var/log"
chmod 700 "$APP_ROOT/var" "$APP_ROOT/var/log" 2>/dev/null || true
cp -p "$RECUPERAR" "$RESPALDO/public/recuperar_password_v3.php"
if [[ -f "$CONFIG" ]]; then cp -p "$CONFIG" "$RESPALDO/config/mail.php"; touch "$RESPALDO/CONFIG_EXISTIA"; else touch "$RESPALDO/CONFIG_NUEVA"; fi
if [[ -f "$SERVICIO" ]]; then cp -p "$SERVICIO" "$RESPALDO/app/includes/mail_service.php"; touch "$RESPALDO/SERVICIO_EXISTIA"; else touch "$RESPALDO/SERVICIO_NUEVO"; fi

restaurar_error() {
  cp -p "$RESPALDO/public/recuperar_password_v3.php" "$RECUPERAR" || true
  if [[ -f "$RESPALDO/CONFIG_EXISTIA" ]]; then cp -p "$RESPALDO/config/mail.php" "$CONFIG" || true; elif [[ -f "$CONFIG" ]]; then mv "$CONFIG" "$RESPALDO/retirados/mail_fallido.php" || true; fi
  if [[ -f "$RESPALDO/SERVICIO_EXISTIA" ]]; then cp -p "$RESPALDO/app/includes/mail_service.php" "$SERVICIO" || true; elif [[ -f "$SERVICIO" ]]; then mv "$SERVICIO" "$RESPALDO/retirados/mail_service_fallido.php" || true; fi
  unset SMTP_PASSWORD || true
  echo "ERROR: instalación cancelada; se restauraron los archivos anteriores." >&2
}
trap restaurar_error ERR

if [[ ! -t 0 ]]; then echo "ERROR: ejecute el instalador desde una terminal para ingresar la contraseña SMTP." >&2; exit 1; fi
read -r -s -p "Contraseña SMTP de no-responder@mypyme360.com: " SMTP_PASSWORD
echo
if [[ -z "$SMTP_PASSWORD" ]]; then echo "ERROR: contraseña vacía." >&2; exit 1; fi
printf '%s' "$SMTP_PASSWORD" | php "$PAQUETE/paso/crear_mail_config.php" "$RESPALDO/config/mail_nuevo.php"
unset SMTP_PASSWORD
php -l "$RESPALDO/config/mail_nuevo.php" >/dev/null
php "$PAQUETE/paso/actualizar_recuperacion.php" "$RESPALDO/public/recuperar_password_v3.php" "$RESPALDO/public/recuperar_nuevo.php"
php -l "$RESPALDO/public/recuperar_nuevo.php" >/dev/null

cp -p "$RESPALDO/config/mail_nuevo.php" "$CONFIG"
chmod 600 "$CONFIG"
cp -p "$PAQUETE/app/includes/mail_service.php" "$SERVICIO"
cp -p "$RESPALDO/public/recuperar_nuevo.php" "$RECUPERAR"
php "$PAQUETE/paso/probar_smtp.php" "$APP_ROOT"
php -l "$SERVICIO" >/dev/null
php -l "$RECUPERAR" >/dev/null
trap - ERR

echo "Recuperación SMTP v5.1 instalada correctamente."
echo "Respaldo: $RESPALDO"
echo "Registro: $APP_ROOT/var/log/mail.log"
echo "Prueba en: https://mypyme360.com/recuperar_password_v3.php"
