<?php
/**
 * Script de limpieza final de webhooks
 * Este script elimina archivos webhook de prueba basado en criterios específicos
 */

// Configuración
$modo_simulacion = false;  // true = simular eliminación, false = eliminar realmente
$analisis_detallado = true; // Si es true, muestra análisis detallado para cada archivo

// Banner
echo "====================================================\n";
echo "   LIMPIEZA FINAL DE WEBHOOKS DE PRUEBA\n";
echo "====================================================\n\n";

if ($modo_simulacion) {
    echo "⚠️ MODO SIMULACIÓN: No se eliminará ningún archivo ⚠️\n";
    echo "Cambia \$modo_simulacion = false para eliminar los archivos\n\n";
}

// Archivos a preservar (webhooks esenciales)
$preservar = [
    'webhook_pagopar.php',      // Webhook principal
    'webhook_pagopar_alt.php'   // Webhook alternativo
];

// Contadores
$total = 0;
$eliminados = 0;
$preservados = 0;

// Buscar todos los archivos webhook_*.php
$webhooks = glob('webhook_*.php');
$total_webhooks = count($webhooks);

echo "Analizando $total_webhooks archivos webhook_*.php...\n\n";

// Procesar cada archivo
foreach ($webhooks as $webhook) {
    $total++;
    
    echo "Procesando: $webhook\n";
    
    // Si es un archivo a preservar, saltarlo
    if (in_array($webhook, $preservar)) {
        echo "  ✅ PRESERVADO: Archivo esencial para el sistema\n\n";
        $preservados++;
        continue;
    }
    
    // Analizar el archivo para determinar si es de prueba
    $es_prueba = false;
    $motivo = "";
    
    // Verificar por nombre
    if (preg_match('/(test|prueba|debug|simple|echo|minimo|headers|ultra|validacion|ejemplo)/i', $webhook)) {
        $es_prueba = true;
        $motivo = "Nombre indica archivo de prueba";
    }
    
    // Si aún no está determinado, verificar contenido
    if (!$es_prueba) {
        $contenido = @file_get_contents($webhook);
        if ($contenido !== false) {
            if (stripos($contenido, 'test') !== false || 
                stripos($contenido, 'prueba') !== false ||
                stripos($contenido, 'DEBUG') !== false ||
                stripos($contenido, 'console.log') !== false ||
                stripos($contenido, 'echo "Prueba') !== false) {
                $es_prueba = true;
                $motivo = "Contenido indica archivo de prueba";
            }
        }
    }
    
    // Verificar si está referenciado en archivos importantes
    $referencias_importantes = 0;
    $archivos_importantes = ['index.php', 'pagopar_config.php', 'config.php', 'webhook_handler.php'];
    
    foreach ($archivos_importantes as $archivo_importante) {
        if (file_exists($archivo_importante)) {
            $contenido = @file_get_contents($archivo_importante);
            if ($contenido !== false && stripos($contenido, $webhook) !== false) {
                $referencias_importantes++;
            }
        }
    }
    
    // Si tiene referencias importantes, no eliminarlo
    if ($referencias_importantes > 0) {
        echo "  ✅ PRESERVADO: Tiene $referencias_importantes referencias en archivos importantes\n\n";
        $preservados++;
        continue;
    }
    
    // Verificar fecha de creación para no eliminar archivos recientes
    $fecha_modificacion = filemtime($webhook);
    $es_reciente = (time() - $fecha_modificacion) < (7 * 24 * 60 * 60); // 7 días
    
    if ($es_reciente && !$es_prueba) {
        echo "  ✅ PRESERVADO: Archivo reciente que no parece ser de prueba\n\n";
        $preservados++;
        continue;
    }
    
    // Mostrar análisis detallado si está activado
    if ($analisis_detallado) {
        echo "  Tamaño: " . round(filesize($webhook) / 1024, 2) . " KB\n";
        echo "  Modificado: " . date("Y-m-d H:i:s", $fecha_modificacion) . "\n";
        
        if ($es_prueba) {
            echo "  Motivo para eliminar: $motivo\n";
        } else {
            echo "  Motivo para eliminar: Sin referencias importantes y no parece esencial\n";
        }
    }
    
    // Eliminar el archivo
    if ($modo_simulacion) {
        echo "  🗑️ SIMULAR ELIMINAR\n\n";
    } else {
        if (@unlink($webhook)) {
            echo "  🗑️ ELIMINADO\n\n";
        } else {
            echo "  ❌ ERROR AL ELIMINAR\n\n";
        }
    }
    $eliminados++;
}

// Resumen final
echo "\n====================================================\n";
echo "RESUMEN DE LA OPERACIÓN\n";
echo "====================================================\n";
echo "Total de archivos webhook analizados: $total\n";
echo "Archivos preservados: $preservados\n";
echo "Archivos " . ($modo_simulacion ? "que se eliminarían" : "eliminados") . ": $eliminados\n";
echo "\n";

if ($modo_simulacion) {
    echo "⚠️ RECUERDA: Este fue un modo de simulación. Para eliminar realmente los archivos:\n";
    echo "1. Edita este script\n";
    echo "2. Cambia \$modo_simulacion = true a \$modo_simulacion = false\n";
    echo "3. Ejecuta el script nuevamente\n";
}

echo "\nArchivos esenciales preservados:\n";
foreach ($preservar as $archivo) {
    if (file_exists($archivo)) {
        echo "- $archivo\n";
    }
}

echo "\n¡Proceso completado!\n";