#!/bin/bash
# ==============================================================================
# IoPlay Suite - Script de Actualización Segura en Producción (Bare-Metal)
# Servidor: 192.95.10.208
# ==============================================================================
# Uso:
#   cd /var/www/html/ioplay-suite
#   sudo bash scripts/update_production.sh
# ==============================================================================

set -e

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

echo ""
echo -e "${BLUE}${BOLD}==============================================================================${NC}"
echo -e "${BLUE}${BOLD}       IoPlay Suite - Actualizador Rápido de Producción (GitHub)              ${NC}"
echo -e "${BLUE}${BOLD}==============================================================================${NC}"
echo ""

# 1. Identificar directorio base
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${BASE_DIR}"
echo -e "${BLUE}[1/5] Directorio del proyecto:${NC} ${BASE_DIR}"

# 2. Configurar directorio seguro en Git y descargar últimos cambios
echo -e "${BLUE}[2/5] Obteniendo últimas actualizaciones desde GitHub...${NC}"
git config --global --add safe.directory "${BASE_DIR}" 2>/dev/null || true
git fetch --all --prune
git pull origin main || git pull

echo -e "${GREEN}✓ Código fuente actualizado desde GitHub.${NC}"

# 3. Actualizar dependencias de Python si hay cambios
echo -e "${BLUE}[3/5] Verificando dependencias de microservicios...${NC}"

# Python DCM
if [ -d "${BASE_DIR}/ioplay-dcm/venv" ]; then
    "${BASE_DIR}/ioplay-dcm/venv/bin/pip" install -q -r "${BASE_DIR}/ioplay-dcm/requirements.txt"
    echo -e "${GREEN}✓ Dependencias de IoPlay DCM al día.${NC}"
fi

# Python ACS
if [ -d "${BASE_DIR}/ioplay-acs/venv" ]; then
    "${BASE_DIR}/ioplay-acs/venv/bin/pip" install -q -r "${BASE_DIR}/ioplay-acs/requirements.txt"
    echo -e "${GREEN}✓ Dependencias de IoPlay ACS al día.${NC}"
fi

# 4. Asegurar permisos correctos en carpetas y bases de datos SQLite
echo -e "${BLUE}[4/5] Asegurando permisos de sistema de archivos...${NC}"
chown -R www-data:www-data "${BASE_DIR}"
chmod -R 775 "${BASE_DIR}/ioplay-customers/data" 2>/dev/null || true
chmod -R 775 "${BASE_DIR}/ioplay-dcm/data" 2>/dev/null || true

# 5. Reiniciar servicios (detecta PM2 o Systemd automáticamente)
echo -e "${BLUE}[5/5] Reiniciando microservicios y recargando Nginx...${NC}"
export PM2_HOME="/var/www/html/pm2"
if command -v pm2 &> /dev/null && pm2 describe ioplay-dcm &> /dev/null; then
    echo -e "${BLUE}• Reiniciando procesos en PM2 (${PM2_HOME})...${NC}"
    pm2 restart ecosystem.config.js
    pm2 save
else
    echo -e "${BLUE}• Reiniciando servicios en Systemd...${NC}"
    systemctl restart ioplay-dcm.service 2>/dev/null || true
    systemctl restart ioplay-acs.service 2>/dev/null || true
fi

# Recargar PHP-FPM si está activo
if systemctl list-unit-files | grep -q 'php.*fpm'; then
    PHP_SVC=$(systemctl list-unit-files | grep -o 'php[0-9.]*-fpm\.service' | head -n 1)
    if [ -n "$PHP_SVC" ]; then
        systemctl reload "$PHP_SVC" 2>/dev/null || systemctl restart "$PHP_SVC"
    fi
fi

# Recargar Nginx
nginx -t > /dev/null 2>&1 && systemctl reload nginx

echo ""
echo -e "${GREEN}${BOLD}==============================================================================${NC}"
echo -e "${GREEN}${BOLD}                 ¡ACTUALIZACIÓN COMPLETADA CON ÉXITO!                         ${NC}"
echo -e "${GREEN}${BOLD}==============================================================================${NC}"

# Chequeo rápido de estado
echo -n "• DCM (127.0.0.1:5541): "
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:5541/api/indexer/status | grep -q "200" && echo -e "${GREEN}OK (200)${NC}" || echo -e "${RED}ERROR${NC}"

echo -n "• ACS (127.0.0.1:5542): "
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:5542/api/status | grep -q "200" && echo -e "${GREEN}OK (200)${NC}" || echo -e "${RED}ERROR${NC}"

echo -n "• Web Nginx (127.0.0.1:5540): "
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:5540/login | grep -q "200" && echo -e "${GREEN}OK (200)${NC}" || echo -e "${RED}ERROR${NC}"
echo "=============================================================================="
echo ""
