#!/usr/bin/env bash
# Actualiza UghPass en el servidor. Uso: bash scripts/actualizar.sh [archivo.zip]
set -euo pipefail
cd "$(dirname "$0")/.."
[ -f .env ] && { set -a; . ./.env; set +a; }
node -e 'if (+process.versions.node.split(".")[0] < 22) { console.error("Hace falta Node 22: nvm install 22 && nvm alias default 22"); process.exit(1) }'
# 1) Respaldo de la base ANTES de tocar nada (si falla, no se sigue).
bash scripts/backup.sh antes-de-actualizar || { echo "No se pudo respaldar la base: actualización cancelada."; exit 1; }
# Respaldo diario automático a las 4:00 (se instala una sola vez).
( crontab -l 2>/dev/null | grep -q 'scripts/backup.sh' ) || \
  ( crontab -l 2>/dev/null; echo "0 4 * * * cd $(pwd) && bash scripts/backup.sh >> backups/backup.log 2>&1" ) | crontab - 2>/dev/null || true

if [ "${1:-}" != "" ]; then
  # 2) Copia del código actual para volver atrás si hace falta: bash scripts/volver-atras.sh
  tar czf backups/codigo-anterior.tgz src drizzle public package.json package-lock.json 2>/dev/null || true
  # Borra el código viejo (no tu .env ni node_modules) para que no queden archivos sueltos
  rm -rf src drizzle public
  unzip -oq "$1"
fi
npm ci --no-audit --no-fund
npm run db:migrate
npm run build

# Si todavía corre la versión vieja (npm start en modo fork), se reemplaza una sola vez por el ecosystem.
if pm2 jlist 2>/dev/null | grep -q '"name":"ughpass"' && ! pm2 jlist | grep -q 'standalone/server.js'; then
  pm2 delete ughpass ughpass-worker >/dev/null 2>&1 || true
fi
if pm2 jlist 2>/dev/null | grep -q 'standalone/server.js'; then
  pm2 reload ecosystem.config.cjs --update-env   # sin corte: reinicia de a una instancia
else
  pm2 start ecosystem.config.cjs
fi
pm2 save
sleep 5
# Chequeo después de actualizar: si algo no responde, se avisa y se explica cómo volver atrás.
SITE=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:3000/ || echo 000)
SALUD=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:3000/api/salud || echo 000)
echo "Sitio: HTTP $SITE · Salud: HTTP $SALUD"
if [ "$SITE" != "200" ]; then
  echo "⚠ El sitio no responde bien. Mirá: pm2 logs ughpass --lines 50"
  echo "  Para volver a la versión anterior: bash scripts/volver-atras.sh"
fi
node scripts/verificar.mjs || true   # chequeo integral (configuración, procesos, base, respaldos)
