#!/bin/bash
###############################################################################
# SCRIPT DE INSTALACIÓN AUTOMÁTICA DE CRON JOBS - LINUX
# XZonas Valencia - https://xzonasvalencia.com
#
# Este script configura automáticamente los 3 cron jobs en Linux
# Requiere: bash, crontab
# Uso: bash setup_crontab.sh
###############################################################################

set -e # Salir en caso de error

# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # Sin color

# Banner
echo -e "${BLUE}"
echo "╔════════════════════════════════════════════════════════════╗"
echo "║     INSTALACIÓN CRON JOBS - XZONAS VALENCIA               ║"
echo "║     Sistema de Créditos Chatbot - Linux                  ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo -e "${NC}"

# Verificar que se está ejecutando en Linux
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
    echo -e "${RED}✗ ERROR: Este script solo funciona en Linux${NC}"
    echo "  Detectado: $OSTYPE"
    exit 1
fi

# Obtener ruta del proyecto
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"

echo -e "${BLUE}Directorio del proyecto: ${NC}$PROJECT_ROOT"
echo ""

# Verificar que los scripts PHP existen
echo -e "${BLUE}Verificando scripts PHP...${NC}"
PHP_SCRIPTS=(
    "$PROJECT_ROOT/admin/chatbot-unified/cron/auto_renew_anuncios.php"
    "$PROJECT_ROOT/admin/chatbot-unified/cron/personalize_messages.php"
    "$PROJECT_ROOT/admin/chatbot-unified/cron/send_marketing_messages.php"
)

for script in "${PHP_SCRIPTS[@]}"; do
    if [ -f "$script" ]; then
        echo -e "${GREEN}✓${NC} $(basename "$script")"
    else
        echo -e "${RED}✗ ERROR: Script no encontrado: $script${NC}"
        exit 1
    fi
done
echo ""

# Verificar que los scripts .sh existen
echo -e "${BLUE}Verificando scripts .sh...${NC}"
SH_SCRIPTS=(
    "$PROJECT_ROOT/admin/chatbot-unified/cron/run_auto_renew.sh"
    "$PROJECT_ROOT/admin/chatbot-unified/cron/run_personalize.sh"
    "$PROJECT_ROOT/admin/chatbot-unified/cron/run_send_messages.sh"
)

for script in "${SH_SCRIPTS[@]}"; do
    if [ -f "$script" ]; then
        echo -e "${GREEN}✓${NC} $(basename "$script")"
        # Dar permisos de ejecución
        chmod +x "$script"
    else
        echo -e "${RED}✗ ERROR: Script no encontrado: $script${NC}"
        exit 1
    fi
done
echo ""

# Verificar directorio de logs
echo -e "${BLUE}Verificando directorio logs...${NC}"
LOGS_DIR="$PROJECT_ROOT/admin/chatbot-unified/logs"
if [ ! -d "$LOGS_DIR" ]; then
    echo -e "${YELLOW}⚠ Creando directorio logs...${NC}"
    mkdir -p "$LOGS_DIR"
    chmod 755 "$LOGS_DIR"
fi
echo -e "${GREEN}✓${NC} Directorio logs OK"
echo ""

# Detectar ruta de PHP
echo -e "${BLUE}Detectando ruta de PHP...${NC}"
if command -v php >/dev/null 2>&1; then
    PHP_BIN=$(which php)
    PHP_VERSION=$(php -v | head -n 1)
    echo -e "${GREEN}✓${NC} PHP encontrado: $PHP_BIN"
    echo "  Versión: $PHP_VERSION"
else
    echo -e "${RED}✗ ERROR: PHP no encontrado en el sistema${NC}"
    echo "  Instalar PHP o agregar al PATH"
    exit 1
fi
echo ""

# Backup del crontab actual
echo -e "${BLUE}Haciendo backup del crontab actual...${NC}"
BACKUP_FILE="$PROJECT_ROOT/crontab_backup_$(date +%Y%m%d_%H%M%S).txt"
crontab -l > "$BACKUP_FILE" 2>/dev/null || echo "# Crontab vacío" > "$BACKUP_FILE"
echo -e "${GREEN}✓${NC} Backup guardado en: $BACKUP_FILE"
echo ""

# Crear nuevas entradas de crontab
echo -e "${BLUE}Creando nuevas entradas de crontab...${NC}"

CRON_ENTRIES="
# ============================================
# XZONAS VALENCIA - SISTEMA CRÉDITOS CHATBOT
# Instalado: $(date '+%Y-%m-%d %H:%M:%S')
# ============================================

# Auto-renovación de anuncios (cada 30 minutos)
*/30 * * * * $PROJECT_ROOT/admin/chatbot-unified/cron/run_auto_renew.sh >> $LOGS_DIR/cron_auto_renew_\$(date +\\%Y\\%m\\%d).log 2>&1

# Personalización de mensajes con OpenAI (cada 5 minutos)
*/5 * * * * $PROJECT_ROOT/admin/chatbot-unified/cron/run_personalize.sh >> $LOGS_DIR/cron_personalize_\$(date +\\%Y\\%m\\%d).log 2>&1

# Envío de mensajes WhatsApp/Push (cada 1 minuto)
* * * * * $PROJECT_ROOT/admin/chatbot-unified/cron/run_send_messages.sh >> $LOGS_DIR/cron_send_\$(date +\\%Y\\%m\\%d).log 2>&1
"

# Agregar nuevas entradas al crontab existente
(crontab -l 2>/dev/null; echo "$CRON_ENTRIES") | crontab -

echo -e "${GREEN}✓${NC} Crontab actualizado"
echo ""

# Verificar instalación
echo -e "${BLUE}Verificando instalación...${NC}"
CRON_COUNT=$(crontab -l | grep -c "XZONAS VALENCIA" || true)
if [ "$CRON_COUNT" -gt 0 ]; then
    echo -e "${GREEN}✓${NC} $CRON_COUNT entradas de XZonas encontradas en crontab"
else
    echo -e "${RED}✗ ERROR: No se encontraron entradas de XZonas en crontab${NC}"
    exit 1
fi
echo ""

# Mostrar crontab actual
echo -e "${BLUE}Crontab actual (entradas XZonas):${NC}"
echo "─────────────────────────────────────────────────────────────"
crontab -l | grep -A 10 "XZONAS VALENCIA"
echo "─────────────────────────────────────────────────────────────"
echo ""

# Probar ejecución manual de un script
echo -e "${BLUE}Probando ejecución manual de auto_renew...${NC}"
bash "$PROJECT_ROOT/admin/chatbot-unified/cron/run_auto_renew.sh"
if [ $? -eq 0 ]; then
    echo -e "${GREEN}✓${NC} Ejecución manual exitosa"
else
    echo -e "${RED}✗ ERROR: Ejecución manual falló${NC}"
    echo "  Verificar logs en: $LOGS_DIR"
fi
echo ""

# Verificar logs generados
echo -e "${BLUE}Verificando logs generados...${NC}"
LOG_FILES=$(ls -1 "$LOGS_DIR"/*.log 2>/dev/null | wc -l)
if [ "$LOG_FILES" -gt 0 ]; then
    echo -e "${GREEN}✓${NC} $LOG_FILES archivos de log encontrados"
    echo ""
    echo -e "${BLUE}Últimos logs:${NC}"
    ls -lh "$LOGS_DIR"/*.log 2>/dev/null | tail -5
else
    echo -e "${YELLOW}⚠${NC} No se encontraron logs todavía (normal si es primera ejecución)"
fi
echo ""

# Resumen final
echo -e "${GREEN}"
echo "╔════════════════════════════════════════════════════════════╗"
echo "║              ✓ INSTALACIÓN COMPLETADA                     ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo -e "${NC}"

echo -e "${BLUE}Cron jobs configurados:${NC}"
echo "  ✓ Auto-renovación: cada 30 minutos"
echo "  ✓ Personalización: cada 5 minutos"
echo "  ✓ Envío mensajes: cada 1 minuto"
echo ""

echo -e "${BLUE}Próximas ejecuciones estimadas:${NC}"
CURRENT_MINUTE=$(date +%M)
CURRENT_HOUR=$(date +%H)

# Calcular próxima ejecución de auto-renovación (cada 30 min)
if [ $((CURRENT_MINUTE % 30)) -eq 0 ]; then
    NEXT_AUTO_RENEW="en menos de 1 minuto"
else
    MINUTES_TO_NEXT=$((30 - (CURRENT_MINUTE % 30)))
    NEXT_AUTO_RENEW="en $MINUTES_TO_NEXT minutos"
fi

# Calcular próxima ejecución de personalización (cada 5 min)
if [ $((CURRENT_MINUTE % 5)) -eq 0 ]; then
    NEXT_PERSONALIZE="en menos de 1 minuto"
else
    MINUTES_TO_NEXT=$((5 - (CURRENT_MINUTE % 5)))
    NEXT_PERSONALIZE="en $MINUTES_TO_NEXT minutos"
fi

echo "  • Auto-renovación: $NEXT_AUTO_RENEW"
echo "  • Personalización: $NEXT_PERSONALIZE"
echo "  • Envío mensajes: en menos de 1 minuto"
echo ""

echo -e "${BLUE}Comandos útiles:${NC}"
echo "  • Ver crontab:        crontab -l"
echo "  • Editar crontab:     crontab -e"
echo "  • Ver logs tiempo real:"
echo "    tail -f $LOGS_DIR/cron_*.log"
echo "  • Restaurar backup:"
echo "    crontab $BACKUP_FILE"
echo ""

echo -e "${YELLOW}⚠️  IMPORTANTE:${NC}"
echo "  • Los logs se rotan automáticamente cuando superan 50MB"
echo "  • Backup guardado en: $BACKUP_FILE"
echo "  • Para detener cron jobs: crontab -e y comentar líneas con #"
echo ""

echo -e "${GREEN}✅ Sistema listo para producción${NC}"
