#!/usr/bin/env bash
# ============================================================================
# deploy.sh — Despliegue desde tu máquina LOCAL al VPS
# ----------------------------------------------------------------------------
# Sincroniza el código por rsync (sin node_modules/dist/.data), y en el servidor
# instala dependencias, compila y recarga PM2 SIN downtime.
#
# Compila EN EL SERVIDOR a propósito: better-sqlite3 es un binario nativo y debe
# compilarse para la arquitectura del VPS (no sirve el binario de tu Mac).
#
# Uso:
#   SERVER=deploy@TU_IP ./deploy/scripts/deploy.sh
# Variables opcionales:
#   APP_DIR=/var/www/peninsula   SSH_PORT=22
# ============================================================================
set -euo pipefail

SERVER="${SERVER:?Define SERVER=usuario@host (p.ej. deploy@203.0.113.10)}"
APP_DIR="${APP_DIR:-/var/www/peninsula}"
SSH_PORT="${SSH_PORT:-22}"
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"

echo "==> Verificando build local (typecheck + tests) antes de subir"
( cd "$ROOT" && npm run build >/dev/null && npm test >/dev/null ) \
  && echo "    build/test OK" \
  || { echo "    ❌ build o tests fallaron localmente; abortando."; exit 1; }

echo "==> Sincronizando código a $SERVER:$APP_DIR"
rsync -az --delete \
  -e "ssh -p $SSH_PORT" \
  --exclude '.git' \
  --exclude 'node_modules' \
  --exclude 'dist' \
  --exclude '.data' \
  --exclude '.toolchain' \
  --exclude '.astro' \
  --exclude '*.log' \
  --exclude '.env' \
  --exclude '.env.*' \
  "$ROOT/" "$SERVER:$APP_DIR/"

echo "==> Instalando, compilando y recargando en el servidor"
ssh -p "$SSH_PORT" "$SERVER" bash -se <<EOF
set -euo pipefail
cd "$APP_DIR"

if [ ! -f .env.production ]; then
  echo "❌ Falta $APP_DIR/.env.production en el servidor."
  echo "   Crea uno: cp deploy/env.production.example .env.production && nano .env.production"
  exit 1
fi

echo "    npm ci (incluye compilar better-sqlite3)…"
npm ci

echo "    build…"
npm run build

echo "    PM2 reload/start…"
if pm2 describe peninsula >/dev/null 2>&1; then
  pm2 reload deploy/pm2/ecosystem.config.cjs --update-env
else
  pm2 start deploy/pm2/ecosystem.config.cjs
fi
pm2 save
EOF

echo "==> ✔ Despliegue completado."
echo "    Logs:   ssh -p $SSH_PORT $SERVER 'pm2 logs peninsula --lines 50'"
echo "    Estado: ssh -p $SSH_PORT $SERVER 'pm2 status'"
