#!/bin/bash
###############################################################################
# PERSONALIZACIÓN DE MENSAJES - Script Cron Linux
# XZonas Valencia - https://xzonasvalencia.com
#
# Descripción: Personaliza mensajes de marketing con OpenAI GPT-4
# Frecuencia: Cada 5 minutos
# Crontab: */5 * * * * /path/to/run_personalize.sh
###############################################################################

# Variables de configuración
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
PHP_SCRIPT="$PROJECT_ROOT/admin/chatbot-unified/cron/personalize_messages.php"
LOG_DIR="$PROJECT_ROOT/admin/chatbot-unified/logs"
LOG_FILE="$LOG_DIR/cron_personalize_$(date +%Y%m%d).log"
ERROR_LOG="$LOG_DIR/cron_errors.log"

# Crear directorio de logs si no existe
mkdir -p "$LOG_DIR"

# Función de logging
log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

log_error() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] $1" >> "$ERROR_LOG"
    log_message "[ERROR] $1"
}

# Inicio
log_message "========================================"
log_message "Iniciando personalización de mensajes"
log_message "========================================"

# Verificar que el script PHP existe
if [ ! -f "$PHP_SCRIPT" ]; then
    log_error "Script PHP no encontrado: $PHP_SCRIPT"
    exit 1
fi

# Ejecutar script PHP
log_message "Ejecutando: $PHP_SCRIPT"

# Detectar ruta de PHP
if command -v php >/dev/null 2>&1; then
    PHP_BIN="php"
elif [ -f /usr/bin/php ]; then
    PHP_BIN="/usr/bin/php"
elif [ -f /usr/local/bin/php ]; then
    PHP_BIN="/usr/local/bin/php"
else
    log_error "PHP no encontrado en el sistema"
    exit 1
fi

log_message "Usando PHP: $PHP_BIN"

# Ejecutar y capturar salida
START_TIME=$(date +%s)
OUTPUT=$("$PHP_BIN" "$PHP_SCRIPT" 2>&1)
EXIT_CODE=$?
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))

# Registrar salida
log_message "Salida del script:"
echo "$OUTPUT" >> "$LOG_FILE"

# Verificar código de salida
if [ $EXIT_CODE -eq 0 ]; then
    log_message "✓ Ejecución exitosa (Duración: ${DURATION}s)"
else
    log_error "Ejecución fallida con código: $EXIT_CODE (Duración: ${DURATION}s)"
    exit $EXIT_CODE
fi

# Rotar logs si superan 50MB
LOG_SIZE=$(stat -f%z "$LOG_FILE" 2>/dev/null || stat -c%s "$LOG_FILE" 2>/dev/null)
if [ -n "$LOG_SIZE" ] && [ "$LOG_SIZE" -gt 52428800 ]; then
    BACKUP_FILE="$LOG_DIR/cron_personalize_$(date +%Y%m%d_%H%M%S)_backup.log"
    mv "$LOG_FILE" "$BACKUP_FILE"
    log_message "Log rotado a: $BACKUP_FILE"
fi

log_message "Proceso completado"
log_message "========================================"

exit 0
