#!/bin/bash
# ==============================================================================
# IoPlay Suite - Script de Activación y Configuración PM2 (con /etc/rc.local)
# Servidor: 192.95.10.208
# PM2 Home: /var/www/html/pm2 (Sin archivos en /root)
# ==============================================================================
# Uso:
#   cd /var/www/html/ioplay-suite
#   sudo bash scripts/setup_pm2.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 - Activación PM2 (Home: /var/www/html/pm2 & /etc/rc.local)    ${NC}"
echo -e "${BLUE}${BOLD}==============================================================================${NC}"
echo ""

# 1. Identificar directorio base
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${BASE_DIR}"

# 2. Configurar PM2_HOME fuera de /root (Ubicación: /var/www/html/pm2)
PM2_DIR="/var/www/html/pm2"
echo -e "${BLUE}[1/7] Configurando directorio PM2_HOME en ${PM2_DIR}...${NC}"
mkdir -p "${PM2_DIR}"
chown -R www-data:www-data "${PM2_DIR}"
chmod -R 775 "${PM2_DIR}"

export PM2_HOME="${PM2_DIR}"

# Persistir PM2_HOME globalmente para todas las sesiones SSH del servidor
echo "export PM2_HOME=${PM2_DIR}" > /etc/profile.d/ioplay_pm2.sh
chmod +x /etc/profile.d/ioplay_pm2.sh
echo -e "${GREEN}✓ PM2_HOME configurado en /var/www/html/pm2 (Sin archivos en /root).${NC}"

# 3. Desactivar y detener servicios en Systemd (para liberar puertos 5541 y 5542)
echo -e "${BLUE}[2/7] Deteniendo y desactivando servicios previos en Systemd...${NC}"
systemctl stop ioplay-dcm.service 2>/dev/null || true
systemctl disable ioplay-dcm.service 2>/dev/null || true
systemctl stop ioplay-acs.service 2>/dev/null || true
systemctl disable ioplay-acs.service 2>/dev/null || true
echo -e "${GREEN}✓ Servicios de Systemd desactivados.${NC}"

# 4. Verificar si PM2 y Node están instalados
echo -e "${BLUE}[3/7] Verificando instalación de PM2...${NC}"
if ! command -v pm2 &> /dev/null; then
    echo -e "${YELLOW}• PM2 no encontrado. Instalando PM2 globalmente vía npm...${NC}"
    if ! command -v npm &> /dev/null; then
        echo -e "${BLUE}• Instalando Node.js y npm...${NC}"
        apt-get update -y
        apt-get install -y nodejs npm
    fi
    npm install -g pm2
fi
echo -e "${GREEN}✓ PM2 disponible ($(pm2 -v)).${NC}"

# 5. Iniciar microservicios con PM2 usando ecosystem.config.js
echo -e "${BLUE}[4/7] Iniciando microservicios en PM2 (DCM: 5541 | ACS: 5542)...${NC}"
# Limpiar instancias previas en el PM2_HOME
PM2_HOME="${PM2_DIR}" pm2 delete ioplay-dcm 2>/dev/null || true
PM2_HOME="${PM2_DIR}" pm2 delete ioplay-acs 2>/dev/null || true
PM2_HOME="${PM2_DIR}" pm2 start "${BASE_DIR}/ecosystem.config.js"

# Guardar dump para resurrección automática
PM2_HOME="${PM2_DIR}" pm2 save
echo -e "${GREEN}✓ Microservicios levantados y guardados en ${PM2_DIR}.${NC}"

# 6. Configurar autoarranque en /etc/rc.local
echo -e "${BLUE}[5/7] Configurando inicio automático en /etc/rc.local...${NC}"
RC_LOCAL="/etc/rc.local"

# Crear /etc/rc.local si no existe
if [ ! -f "$RC_LOCAL" ]; then
    cat << 'EOF' > "$RC_LOCAL"
#!/bin/bash
# /etc/rc.local

exit 0
EOF
fi

# Eliminar entradas previas de ioplay en rc.local para no duplicar
sed -i '/# IoPlay Suite Auto-Start/d' "$RC_LOCAL"
sed -i '/export PM2_HOME=\/var\/www\/html\/pm2/d' "$RC_LOCAL"
sed -i '/pm2 resurrect/d' "$RC_LOCAL"

# Insertar el bloque de arranque antes de 'exit 0'
sed -i '/exit 0/i # IoPlay Suite Auto-Start\nexport PM2_HOME=/var/www/html/pm2\npm2 resurrect 2>/dev/null || pm2 start /var/www/html/ioplay-suite/ecosystem.config.js\n' "$RC_LOCAL"
chmod +x "$RC_LOCAL"

# Asegurar servicio rc-local en systemd si existe
if systemctl list-unit-files | grep -q 'rc-local\.service'; then
    systemctl enable rc-local 2>/dev/null || true
    systemctl start rc-local 2>/dev/null || true
fi
echo -e "${GREEN}✓ /etc/rc.local configurado con éxito para autoarranque de PM2.${NC}"

# 7. Actualizar configuración Nginx para puerto 5540
echo -e "${BLUE}[6/7] Actualizando Nginx al Puerto 5540...${NC}"
if [ -f "/etc/nginx/conf.d/ioplay-customers.conf" ]; then
    PHP_SOCK="/run/php/php-fpm.sock"
    for s in /run/php/php8.4-fpm.sock /run/php/php8.3-fpm.sock /run/php/php8.2-fpm.sock /run/php/php8.1-fpm.sock /var/run/php/php8.3-fpm.sock; do
        if [ -S "$s" ]; then
            PHP_SOCK="$s"
            break
        fi
    done

    sed -e "s|/var/www/ioplay-suite|${BASE_DIR}|g" \
        -e "s|/run/php/php-fpm.sock|${PHP_SOCK}|g" \
        "${BASE_DIR}/scripts/nginx/ioplay-customers.conf" > /etc/nginx/conf.d/ioplay-customers.conf

    nginx -t > /dev/null 2>&1 && systemctl reload nginx
    echo -e "${GREEN}✓ Nginx actualizado y escuchando en puerto 5540.${NC}"
fi

# 8. Diagnóstico de Salud
echo -e "${BLUE}[7/7] Verificando conectividad de la Suite...${NC}"
sleep 2

echo ""
PM2_HOME="${PM2_DIR}" pm2 list
echo ""

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 (HTTP 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 (HTTP 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 (HTTP 200)${NC}" || echo -e "${RED}ERROR${NC}"

echo ""
echo -e "${GREEN}${BOLD}==============================================================================${NC}"
echo -e "${GREEN}${BOLD}     ¡ECOSISTEMA PM2 CONFIGURADO SATISFACTORIAMENTE EN /var/www/html/pm2!     ${NC}"
echo -e "${GREEN}${BOLD}==============================================================================${NC}"
echo ""
echo "Configuración Aplicada:"
echo "  • PM2_HOME:     /var/www/html/pm2 (Sin archivos en /root)"
echo "  • Auto-Start:   /etc/rc.local"
echo "  • Web Nginx:    http://192.95.10.208:5540/login"
echo "  • DCM Indexer:  http://127.0.0.1:5541"
echo "  • ACS TR-069:   http://127.0.0.1:5542"
echo "  • Reservado:    http://127.0.0.1:5543"
echo ""
