<?php
/**
 * VERIFICACIÓN COMPLETA - Sistema de Pedidos PagoPar
 * Estado de archivos PHP para crear nuevos pedidos
 */

echo "<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Estado del Sistema - Crear Pedidos PagoPar</title>
    <style>
        body { font-family: Arial, sans-serif; max-width: 1200px; margin: 20px auto; padding: 20px; }
        .header { background: #007bff; color: white; padding: 20px; border-radius: 10px; margin-bottom: 20px; text-align: center; }
        .section { background: #f8f9fa; padding: 20px; border-radius: 10px; margin: 20px 0; border-left: 5px solid #007bff; }
        .success { background: #d4edda; color: #155724; padding: 15px; border-radius: 5px; margin: 10px 0; }
        .error { background: #f8d7da; color: #721c24; padding: 15px; border-radius: 5px; margin: 10px 0; }
        .warning { background: #fff3cd; color: #856404; padding: 15px; border-radius: 5px; margin: 10px 0; }
        .info { background: #d1ecf1; color: #0c5460; padding: 15px; border-radius: 5px; margin: 10px 0; }
        pre { background: #2d3748; color: #e2e8f0; padding: 15px; border-radius: 5px; overflow-x: auto; font-size: 11px; }
        table { width: 100%; border-collapse: collapse; margin: 15px 0; }
        th, td { border: 1px solid #ddd; padding: 12px; text-align: left; vertical-align: top; }
        th { background: #e9ecef; font-weight: bold; }
        .status-ok { color: #28a745; font-weight: bold; }
        .status-error { color: #dc3545; font-weight: bold; }
        .status-warning { color: #ffc107; font-weight: bold; }
        .btn { background: #007bff; color: white; padding: 8px 16px; border: none; border-radius: 5px; cursor: pointer; text-decoration: none; display: inline-block; margin: 5px; }
        .btn:hover { background: #0056b3; }
        .btn-success { background: #28a745; }
        .btn-danger { background: #dc3545; }
    </style>
</head>
<body>";

echo "<div class='header'>";
echo "<h1>🔍 VERIFICACIÓN COMPLETA DEL SISTEMA PAGOPAR</h1>";
echo "<p>Estado de todos los archivos PHP para crear pedidos con tokens actuales</p>";
echo "<p><strong>Fecha:</strong> " . date('d/m/Y H:i:s') . "</p>";
echo "</div>";

// Incluir configuración
include 'pagopar_config.php';

// VERIFICACIÓN 1: Configuración
echo "<div class='section'>";
echo "<h2>🔧 1. CONFIGURACIÓN PAGOPAR</h2>";

echo "<table>";
echo "<tr><th>Elemento</th><th>Estado</th><th>Valor</th><th>Observaciones</th></tr>";

// Verificar tokens
$tokens_ok = !empty($public_key) && !empty($private_key);
echo "<tr>";
echo "<td>Tokens</td>";
echo "<td class='" . ($tokens_ok ? 'status-ok">✅ OK' : 'status-error">❌ ERROR') . "</td>";
echo "<td>Public: " . substr($public_key ?? 'NO DEFINIDO', 0, 8) . "...<br>Private: " . substr($private_key ?? 'NO DEFINIDO', 0, 8) . "...</td>";
echo "<td>" . ($tokens_ok ? 'Regenerados 18/10/2025' : 'No configurados') . "</td>";
echo "</tr>";

// Verificar URLs
$urls_ok = !empty($api_url) && !empty($webhook_url);
echo "<tr>";
echo "<td>URLs API</td>";
echo "<td class='" . ($urls_ok ? 'status-ok">✅ OK' : 'status-error">❌ ERROR') . "</td>";
echo "<td>API: " . ($api_url ?? 'NO DEFINIDA') . "<br>Webhook: " . ($webhook_url ?? 'NO DEFINIDA') . "</td>";
echo "<td>" . ($urls_ok ? 'Configuradas correctamente' : 'URLs faltantes') . "</td>";
echo "</tr>";

// Verificar ambiente
echo "<tr>";
echo "<td>Ambiente</td>";
echo "<td class='status-warning'>⚠️ STAGING</td>";
echo "<td>" . ($environment ?? 'NO DEFINIDO') . "</td>";
echo "<td>Debe cambiar a 'produccion' después de validación</td>";
echo "</tr>";

echo "</table>";
echo "</div>";

// VERIFICACIÓN 2: Base de datos
echo "<div class='section'>";
echo "<h2>🗄️ 2. BASE DE DATOS</h2>";

try {
    $pdo = new PDO("mysql:host=localhost;dbname=jkeas_db", "root", "");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "<div class='success'>✅ Conexión a base de datos exitosa</div>";
    
    // Verificar tabla pedidos_pagopar
    $stmt = $pdo->query("DESCRIBE pedidos_pagopar");
    $campos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo "<h3>📋 Estructura tabla pedidos_pagopar:</h3>";
    echo "<table>";
    echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Default</th></tr>";
    foreach ($campos as $campo) {
        echo "<tr>";
        echo "<td>" . $campo['Field'] . "</td>";
        echo "<td>" . $campo['Type'] . "</td>";
        echo "<td>" . ($campo['Null'] === 'YES' ? 'SÍ' : 'NO') . "</td>";
        echo "<td>" . ($campo['Default'] ?? 'NULL') . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // Verificar últimos pedidos
    $stmt = $pdo->query("SELECT id, id_pedido_comercio, monto_total, estado, fecha_creacion FROM pedidos_pagopar ORDER BY fecha_creacion DESC LIMIT 5");
    $pedidos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if ($pedidos) {
        echo "<h3>📊 Últimos 5 pedidos en BD:</h3>";
        echo "<table>";
        echo "<tr><th>ID</th><th>ID Comercio</th><th>Monto</th><th>Estado</th><th>Fecha</th></tr>";
        foreach ($pedidos as $pedido) {
            echo "<tr>";
            echo "<td>" . $pedido['id'] . "</td>";
            echo "<td>" . $pedido['id_pedido_comercio'] . "</td>";
            echo "<td>" . number_format($pedido['monto_total'], 0, '.', ',') . "</td>";
            echo "<td>" . $pedido['estado'] . "</td>";
            echo "<td>" . $pedido['fecha_creacion'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
    } else {
        echo "<div class='info'>ℹ️ No hay pedidos previos en la base de datos</div>";
    }
    
} catch (Exception $e) {
    echo "<div class='error'>❌ Error de base de datos: " . htmlspecialchars($e->getMessage()) . "</div>";
}

echo "</div>";

// VERIFICACIÓN 3: Archivos PHP principales
echo "<div class='section'>";
echo "<h2>📄 3. ARCHIVOS PHP PRINCIPALES</h2>";

$archivos_principales = [
    'guardar_pedido.php' => 'Crear pedidos en sistema local',
    'iniciar_pago_pagopar.php' => 'Enviar pedidos a PagoPar',
    'webhook_pagopar.php' => 'Recibir notificaciones de pago',
    'pagopar_config.php' => 'Configuración de tokens',
    'resultado_pago_pagopar.php' => 'Mostrar resultado del pago'
];

echo "<table>";
echo "<tr><th>Archivo</th><th>Estado</th><th>Función</th><th>Observaciones</th></tr>";

foreach ($archivos_principales as $archivo => $funcion) {
    $existe = file_exists($archivo);
    $tamaño = $existe ? filesize($archivo) : 0;
    
    echo "<tr>";
    echo "<td>$archivo</td>";
    echo "<td class='" . ($existe ? 'status-ok">✅ EXISTE' : 'status-error">❌ NO EXISTE') . "</td>";
    echo "<td>$funcion</td>";
    echo "<td>" . ($existe ? "Tamaño: " . number_format($tamaño) . " bytes" : "Archivo faltante") . "</td>";
    echo "</tr>";
}

echo "</table>";
echo "</div>";

// VERIFICACIÓN 4: Test de creación de pedido
echo "<div class='section'>";
echo "<h2>🧪 4. TEST DE CREACIÓN DE PEDIDO</h2>";

$crear_test = isset($_GET['test']) || isset($_POST['test']);

if ($crear_test) {
    echo "<h3>🚀 Probando creación de pedido...</h3>";
    
    $monto = 50000; // 50.000 Gs
    $concepto = "Test Sistema Completo - " . date('H:i:s');
    
    $pedido_data = [
        'public_key' => $public_key,
        'private_key' => $private_key,
        'concepto' => $concepto,
        'monto' => $monto,
        'moneda' => 'PYG',
        'webhook_url' => $webhook_url,
        'url_success' => $return_url . '?status=success',
        'url_error' => $return_url . '?status=error'
    ];
    
    echo "<p><strong>Datos del test:</strong></p>";
    echo "<pre>" . htmlspecialchars(json_encode($pedido_data, JSON_PRETTY_PRINT)) . "</pre>";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $api_url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($pedido_data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Accept: application/json'
    ]);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_error = curl_error($ch);
    curl_close($ch);
    
    echo "<p><strong>Respuesta HTTP:</strong> $http_code</p>";
    if ($curl_error) {
        echo "<div class='error'>cURL Error: " . htmlspecialchars($curl_error) . "</div>";
    }
    
    echo "<p><strong>Respuesta JSON:</strong></p>";
    echo "<pre>" . htmlspecialchars($response) . "</pre>";
    
    $respuesta_data = json_decode($response, true);
    
    if ($http_code === 200 && $respuesta_data && isset($respuesta_data['respuesta']) && $respuesta_data['respuesta'] === true) {
        $numero_pedido_test = $respuesta_data['numero_pedido'] ?? 'NO_DISPONIBLE';
        
        echo "<div class='success'>";
        echo "<h4>🎉 ¡PEDIDO DE TEST CREADO EXITOSAMENTE!</h4>";
        echo "<p><strong>Número de pedido:</strong> #$numero_pedido_test</p>";
        echo "</div>";
        
        // Probar consulta inmediata
        echo "<h3>🔍 Probando consulta del pedido creado...</h3>";
        
        $data_consulta = json_encode([
            'numero_pedido' => $numero_pedido_test,
            'private_key' => $private_key
        ]);
        
        sleep(2); // Dar tiempo para procesamiento
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.pagopar.com/api/pedidos/1.1/traer");
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_consulta);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_TIMEOUT, 15);
        
        $response_consulta = curl_exec($ch);
        $http_code_consulta = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        
        echo "<p><strong>Respuesta consulta:</strong></p>";
        echo "<pre>" . htmlspecialchars($response_consulta) . "</pre>";
        
        $respuesta_consulta = json_decode($response_consulta, true);
        
        if ($http_code_consulta === 200 && $respuesta_consulta && isset($respuesta_consulta['respuesta']) && $respuesta_consulta['respuesta'] === true) {
            echo "<div class='success'>";
            echo "<h4>🚀 ¡PASO 3 FUNCIONANDO PERFECTAMENTE!</h4>";
            echo "<p>✅ El pedido #$numero_pedido_test se consulta correctamente</p>";
            echo "<p>🎯 <strong>Sistema completamente funcional</strong></p>";
            echo "</div>";
            
            echo "<div class='info'>";
            echo "<h4>📋 Acciones recomendadas:</h4>";
            echo "<ol>";
            echo "<li>Informar a PagoPar que uses el pedido <strong>#$numero_pedido_test</strong> para validación</li>";
            echo "<li>El Paso 3 debería cambiar a verde con este pedido</li>";
            echo "<li>Solicitar pase a producción una vez validado</li>";
            echo "</ol>";
            echo "</div>";
            
        } else {
            echo "<div class='warning'>";
            echo "<h4>⚠️ Consulta de pedido falló</h4>";
            if (isset($respuesta_consulta['resultado'])) {
                echo "<p>Error: " . htmlspecialchars($respuesta_consulta['resultado']) . "</p>";
            }
            echo "</div>";
        }
        
        // Guardar en BD local si es posible
        if (isset($pdo)) {
            try {
                $stmt = $pdo->prepare("INSERT INTO pedidos_pagopar (id_pedido_comercio, monto_total, estado, fecha_creacion) VALUES (?, ?, 'test', NOW())");
                $stmt->execute(["TEST-$numero_pedido_test", $monto]);
                echo "<div class='info'>✅ Pedido de test guardado en BD local</div>";
            } catch (Exception $e) {
                echo "<div class='warning'>⚠️ No se pudo guardar en BD: " . htmlspecialchars($e->getMessage()) . "</div>";
            }
        }
        
    } else {
        echo "<div class='error'>";
        echo "<h4>❌ Error en creación de pedido de test</h4>";
        if (isset($respuesta_data['resultado'])) {
            echo "<p>Error: " . htmlspecialchars($respuesta_data['resultado']) . "</p>";
        }
        echo "</div>";
    }
    
} else {
    echo "<p>Para verificar que el sistema puede crear pedidos nuevos:</p>";
    echo "<a href='?test=1' class='btn btn-success'>🧪 EJECUTAR TEST DE CREACIÓN</a>";
}

echo "</div>";

// RESUMEN FINAL
echo "<div class='section'>";
echo "<h2>📊 RESUMEN FINAL</h2>";

echo "<table>";
echo "<tr><th>Componente</th><th>Estado</th><th>Observaciones</th></tr>";

echo "<tr>";
echo "<td><strong>Configuración PagoPar</strong></td>";
echo "<td class='" . ($tokens_ok && $urls_ok ? 'status-ok">✅ LISTO' : 'status-error">❌ PROBLEMAS') . "</td>";
echo "<td>" . ($tokens_ok && $urls_ok ? 'Tokens regenerados, URLs configuradas' : 'Verificar configuración') . "</td>";
echo "</tr>";

$db_ok = isset($pdo) && !empty($campos);
echo "<tr>";
echo "<td><strong>Base de Datos</strong></td>";
echo "<td class='" . ($db_ok ? 'status-ok">✅ LISTO' : 'status-error">❌ PROBLEMAS') . "</td>";
echo "<td>" . ($db_ok ? 'Tabla pedidos_pagopar correcta' : 'Problemas de conexión o estructura') . "</td>";
echo "</tr>";

$archivos_ok = file_exists('guardar_pedido.php') && file_exists('iniciar_pago_pagopar.php');
echo "<tr>";
echo "<td><strong>Archivos PHP</strong></td>";
echo "<td class='" . ($archivos_ok ? 'status-ok">✅ LISTO' : 'status-error">❌ PROBLEMAS') . "</td>";
echo "<td>" . ($archivos_ok ? 'Archivos principales disponibles' : 'Archivos faltantes') . "</td>";
echo "</tr>";

$sistema_ok = $tokens_ok && $urls_ok && $db_ok && $archivos_ok;
echo "<tr style='background: " . ($sistema_ok ? '#d4edda' : '#f8d7da') . ";'>";
echo "<td><strong>SISTEMA COMPLETO</strong></td>";
echo "<td class='" . ($sistema_ok ? 'status-ok">🚀 LISTO PARA CREAR PEDIDOS' : 'status-error">❌ NECESITA CORRECCIONES') . "</td>";
echo "<td>" . ($sistema_ok ? 'Todos los componentes funcionando' : 'Revisar componentes con problemas') . "</td>";
echo "</tr>";

echo "</table>";

if ($sistema_ok) {
    echo "<div class='success'>";
    echo "<h3>🎉 ¡SISTEMA COMPLETAMENTE FUNCIONAL!</h3>";
    echo "<p>✅ Puedes crear pedidos nuevos con los tokens actuales</p>";
    echo "<p>✅ El Paso 3 debería funcionar con pedidos nuevos</p>";
    echo "<p>🚀 Listo para completar validación PagoPar</p>";
    echo "</div>";
} else {
    echo "<div class='warning'>";
    echo "<h3>⚠️ Sistema necesita correcciones</h3>";
    echo "<p>Revisa los componentes marcados con ❌ antes de crear pedidos</p>";
    echo "</div>";
}

echo "</div>";

// Log del estado del sistema
if (!is_dir('logs')) mkdir('logs', 0755, true);
$log_content = date('Y-m-d H:i:s') . " - VERIFICACIÓN SISTEMA COMPLETO\n";
$log_content .= "Tokens: " . ($tokens_ok ? 'OK' : 'ERROR') . "\n";
$log_content .= "URLs: " . ($urls_ok ? 'OK' : 'ERROR') . "\n";
$log_content .= "Base de datos: " . ($db_ok ? 'OK' : 'ERROR') . "\n";
$log_content .= "Archivos PHP: " . ($archivos_ok ? 'OK' : 'ERROR') . "\n";
$log_content .= "Sistema completo: " . ($sistema_ok ? 'LISTO' : 'NECESITA CORRECCIONES') . "\n";
if (isset($numero_pedido_test)) {
    $log_content .= "Pedido test creado: #$numero_pedido_test\n";
}
$log_content .= str_repeat("=", 100) . "\n";

file_put_contents('logs/verificacion_sistema.log', $log_content, FILE_APPEND | LOCK_EX);

echo "<p><small>📝 Verificación registrada en: logs/verificacion_sistema.log</small></p>";

echo "</body></html>";
?>