<?php
/**
 * Analizador detallado de webhooks
 * Este script analiza todos los webhooks en el sistema y genera un reporte detallado
 */

// Configuración
$modo_informe = true; // Si es true, solo genera informe. Si es false, permite seleccionar archivos para eliminar

// Banner
echo "====================================================\n";
echo "   ANÁLISIS DETALLADO DE WEBHOOKS PAGOPAR\n";
echo "====================================================\n\n";

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

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

// Array para almacenar información de cada webhook
$info_webhooks = [];

// Analizar cada webhook
foreach ($webhooks as $webhook) {
    $info = [
        'archivo' => $webhook,
        'tamaño' => filesize($webhook),
        'modificado' => date("Y-m-d H:i:s", filemtime($webhook)),
        'referencias' => 0,
        'archivos_referencia' => [],
        'contenido' => '',
        'es_prueba' => false,
        'importancia' => 0  // 0-10, donde 10 es muy importante
    ];
    
    // Leer el contenido del archivo
    $contenido = @file_get_contents($webhook);
    if ($contenido !== false) {
        // Extraer los primeros 200 caracteres para mostrarlos como resumen
        $info['contenido'] = substr(strip_tags($contenido), 0, 200) . '...';
        
        // Determinar si es un archivo de prueba
        if (strpos($contenido, 'test') !== false || 
            strpos($contenido, 'prueba') !== false || 
            strpos($contenido, 'DEBUG') !== false ||
            strpos($webhook, 'test') !== false || 
            strpos($webhook, 'debug') !== false || 
            strpos($webhook, 'prueba') !== false) {
            $info['es_prueba'] = true;
        }
        
        // Si contiene palabras clave como "producción", aumentar importancia
        if (strpos($contenido, 'produccion') !== false || 
            strpos($contenido, 'producción') !== false || 
            strpos($contenido, 'OFICIAL') !== false) {
            $info['importancia'] += 3;
        }
    }
    
    // Almacenar la información en el array
    $info_webhooks[$webhook] = $info;
}

// Buscar referencias a los webhooks en otros archivos
$archivos_php = glob('*.php');
foreach ($archivos_php as $archivo) {
    $contenido = @file_get_contents($archivo);
    if ($contenido !== false) {
        foreach ($webhooks as $webhook) {
            if (strpos($contenido, $webhook) !== false) {
                // Esta archivo hace referencia al webhook
                $info_webhooks[$webhook]['referencias']++;
                $info_webhooks[$webhook]['archivos_referencia'][] = $archivo;
                
                // Aumentar la importancia si está referenciado en un archivo importante
                if (strpos($archivo, 'config') !== false || 
                    strpos($archivo, 'pagopar') !== false ||
                    $archivo == 'index.php') {
                    $info_webhooks[$webhook]['importancia'] += 2;
                }
            }
        }
    }
}

// Asignar importancia a webhooks conocidos
$webhooks_importantes = [
    'webhook_pagopar.php' => 10,
    'webhook_pagopar_alt.php' => 8,
    'webhook_copia_exacta.php' => 7
];

foreach ($webhooks_importantes as $webhook => $importancia) {
    if (isset($info_webhooks[$webhook])) {
        $info_webhooks[$webhook]['importancia'] = $importancia;
    }
}

// Ordenar webhooks por importancia (descendente)
uasort($info_webhooks, function($a, $b) {
    return $b['importancia'] - $a['importancia'];
});

// Generar el informe
echo "INFORME DE WEBHOOKS ORDENADOS POR IMPORTANCIA\n";
echo "====================================================\n\n";

foreach ($info_webhooks as $webhook => $info) {
    $estado = ($info['importancia'] >= 5) ? "⭐ ESENCIAL" : (($info['es_prueba']) ? "🧪 PRUEBA" : "❓ DESCONOCIDO");
    $referencias = count($info['archivos_referencia']);
    
    echo "$webhook ($estado)\n";
    echo "----------------------------------------------------\n";
    echo "Importancia: " . $info['importancia'] . "/10\n";
    echo "Tamaño: " . round($info['tamaño'] / 1024, 2) . " KB\n";
    echo "Última modificación: " . $info['modificado'] . "\n";
    echo "Referencias: $referencias archivos\n";
    
    if ($referencias > 0) {
        echo "Archivos que lo referencian:\n";
        $max_mostrar = 5; // Limitar número de referencias mostradas
        $i = 0;
        foreach ($info['archivos_referencia'] as $archivo_ref) {
            echo "  - $archivo_ref\n";
            $i++;
            if ($i >= $max_mostrar && count($info['archivos_referencia']) > $max_mostrar) {
                echo "  - ... y " . (count($info['archivos_referencia']) - $max_mostrar) . " más\n";
                break;
            }
        }
    }
    
    echo "Contenido (resumen): " . $info['contenido'] . "\n\n";
}

// Generar recomendaciones
echo "\n====================================================\n";
echo "RECOMENDACIONES\n";
echo "====================================================\n\n";

$webhooks_a_preservar = [];
$webhooks_a_eliminar = [];

foreach ($info_webhooks as $webhook => $info) {
    if ($info['importancia'] >= 5) {
        $webhooks_a_preservar[] = $webhook;
    } else if ($info['es_prueba']) {
        $webhooks_a_eliminar[] = $webhook;
    } else if ($info['referencias'] == 0) {
        $webhooks_a_eliminar[] = $webhook;
    } else {
        // Casos dudosos
        if ($info['importancia'] <= 2) {
            $webhooks_a_eliminar[] = $webhook;
        } else {
            $webhooks_a_preservar[] = $webhook;
        }
    }
}

echo "Webhooks a PRESERVAR (" . count($webhooks_a_preservar) . "):\n";
foreach ($webhooks_a_preservar as $webhook) {
    echo "✅ $webhook\n";
}

echo "\nWebhooks a ELIMINAR (" . count($webhooks_a_eliminar) . "):\n";
foreach ($webhooks_a_eliminar as $webhook) {
    echo "🗑️ $webhook\n";
}

// Generar código para el script de limpieza
echo "\n====================================================\n";
echo "CÓDIGO PARA LIMPIAR WEBHOOKS\n";
echo "====================================================\n\n";

echo "// Archivos a preservar (no se eliminarán)\n";
echo "\$preservar = [\n";
foreach ($webhooks_a_preservar as $webhook) {
    echo "    '$webhook',\n";
}
echo "];\n\n";

echo "// Archivos a eliminar\n";
echo "\$eliminar = [\n";
foreach ($webhooks_a_eliminar as $webhook) {
    echo "    '$webhook',\n";
}
echo "];\n";

// Fin del script
echo "\n\n¡Análisis completado!\n";