#!/bin/bash
# ================================================================
# DEPLOY SERVER — Sistema de Gestión
# ================================================================
# Ejecutar en la terminal de cPanel después de hacer git push:
#
#   bash ~/sistema.websiteprocl.com/deploy-server.sh
#
# La primera vez que lo configures, edita las variables de abajo.
# ================================================================

# ── CONFIGURACIÓN ───────────────────────────────────────────────
REPO_DIR="/home/arondon/sistema.websiteprocl.com"   # Repo git en el servidor
PUBLIC_HTML="/home/arondon/public_html/sistema"      # Raíz del dominio sistema.websiteprocl.com
BACKEND_DIR="$PUBLIC_HTML/backend"                   # Carpeta PHP del API
FRONTEND_DIR="$PUBLIC_HTML"                          # Raíz donde van los archivos del frontend
GIT_BRANCH="master"
# ────────────────────────────────────────────────────────────────

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'

log()  { echo -e "${CYAN}▶${NC} $1"; }
ok()   { echo -e "${GREEN}✓${NC} $1"; }
warn() { echo -e "${YELLOW}⚠${NC}  $1"; }
err()  { echo -e "${RED}✗ ERROR:${NC} $1"; exit 1; }
sep()  { echo -e "\n${BOLD}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"; }

sep
echo -e "${BOLD}  DEPLOY SERVIDOR — Sistema de Gestión${NC}"
sep

# ── Verificar que el repo existe ────────────────────────────────
[ -d "$REPO_DIR/.git" ] || err "No se encontró el repo en: $REPO_DIR\n  Clona primero: git clone https://gitlab.com/arondon21/sistema.git $REPO_DIR"

# ── 1. Git pull ─────────────────────────────────────────────────
echo ""
log "1/4  Actualizando código desde GitLab..."
cd "$REPO_DIR"
git fetch origin
git reset --hard origin/$GIT_BRANCH
COMMIT=$(git log -1 --format="%h — %s")
ok "Código actualizado: $COMMIT"

# ── 2. Backend ──────────────────────────────────────────────────
echo ""
log "2/4  Desplegando backend PHP..."

mkdir -p "$BACKEND_DIR"
mkdir -p "$BACKEND_DIR/uploads/logos"
mkdir -p "$BACKEND_DIR/pdf/generated"

# Copiar módulos del backend (sin sobreescribir .env de producción)
for DIR in api config helpers middleware services; do
  rm -rf "$BACKEND_DIR/$DIR"
  cp -R "$REPO_DIR/backend/$DIR" "$BACKEND_DIR/"
done
cp "$REPO_DIR/backend/index.php"  "$BACKEND_DIR/"
cp "$REPO_DIR/backend/.htaccess"  "$BACKEND_DIR/"

# Permisos
chmod 755 "$BACKEND_DIR/uploads"
chmod 755 "$BACKEND_DIR/pdf/generated"
chmod 755 "$BACKEND_DIR/uploads/logos"

ok "Backend desplegado en: $BACKEND_DIR"

# Verificar que existe el .env de producción
if [ ! -f "$BACKEND_DIR/.env" ]; then
  warn ".env NO encontrado en $BACKEND_DIR/"
  warn "Copia y configura: cp $REPO_DIR/backend/.env.example $BACKEND_DIR/.env"
fi

# ── 3. Frontend ─────────────────────────────────────────────────
echo ""
log "3/4  Desplegando frontend React..."

# Verificar si Node.js está disponible
if command -v node &>/dev/null; then
  NODE_VER=$(node -v)
  ok "Node.js encontrado: $NODE_VER"

  log "   Instalando dependencias..."
  cd "$REPO_DIR/frontend"
  npm install --silent 2>/dev/null || npm install

  log "   Generando build de producción..."
  npm run build

  ok "Build generado"
  log "   Copiando archivos al servidor..."
  # Limpiar archivos anteriores del frontend (excepto backend/)
  find "$FRONTEND_DIR" -maxdepth 1 -not -name 'backend' -not -name '.' -not -name '.htaccess' -delete 2>/dev/null || true
  cp -R "$REPO_DIR/frontend/dist/." "$FRONTEND_DIR/"
  ok "Frontend desplegado desde build"

else
  # Sin Node.js: buscar dist/ en el repo (debe estar commiteado)
  warn "Node.js no disponible en el servidor."

  if [ -d "$REPO_DIR/frontend/dist" ] && [ -n "$(ls -A $REPO_DIR/frontend/dist)" ]; then
    log "   Usando dist/ del repositorio..."
    find "$FRONTEND_DIR" -maxdepth 1 -not -name 'backend' -not -name '.' -not -name '.htaccess' -delete 2>/dev/null || true
    cp -R "$REPO_DIR/frontend/dist/." "$FRONTEND_DIR/"
    ok "Frontend desplegado desde dist/ del repo"
  else
    warn "No se encontró dist/ en el repo."
    warn "Opciones:"
    warn "  A) Instala Node.js en el servidor (cPanel → Setup Node.js App)"
    warn "  B) Corre 'bash deploy.sh' en tu Mac y sube dist.zip manualmente"
  fi
fi

ok "Frontend en: $FRONTEND_DIR"

# ── 4. Verificaciones ────────────────────────────────────────────
echo ""
log "4/4  Verificando deploy..."

# Comprobar index.html del frontend
if [ -f "$FRONTEND_DIR/index.html" ]; then
  ok "index.html presente"
else
  warn "index.html NO encontrado en $FRONTEND_DIR"
fi

# Comprobar index.php del backend
if [ -f "$BACKEND_DIR/index.php" ]; then
  ok "backend/index.php presente"
else
  warn "backend/index.php NO encontrado"
fi

# Migraciones pendientes
MIGRATIONS=$(cd "$REPO_DIR" && git diff --name-only HEAD~1 HEAD 2>/dev/null | grep "^database/" || true)
if [ -n "$MIGRATIONS" ]; then
  echo ""
  warn "Migraciones SQL detectadas — ejecutar en phpMyAdmin:"
  for m in $MIGRATIONS; do
    echo -e "  ${YELLOW}→${NC} $m"
  done
fi

sep
echo ""
echo -e "${BOLD}  Deploy completado${NC}"
echo -e "  Commit: $(cd $REPO_DIR && git log -1 --format='%h — %s')"
echo ""
echo "  Verifica en:"
echo "  → https://sistema.websiteprocl.com"
echo "  → https://sistema.websiteprocl.com/backend/health"
echo ""
sep
