<?php
/**
 * Archivo para probar la funcionalidad de envío de WhatsApp
 * Este script verifica que la configuración de WhatsApp esté correctamente
 * configurada en la base de datos y envía un mensaje de prueba.
 */

require_once 'includes/db.php';
require_once 'includes/whatsapp_sender.php';

// Función para imprimir resultados en formato legible
function printResult($title, $result) {
    echo "<h3>$title</h3>";
    echo "<pre>";
    print_r($result);
    echo "</pre>";
    echo "<hr>";
}

// Inicia la página HTML
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Prueba de WhatsApp</title>
    <style>
        body {
            font-family: 'Segoe UI', Arial, sans-serif;
            margin: 20px;
            line-height: 1.6;
        }
        pre {
            background-color: #f5f5f5;
            padding: 10px;
            border-radius: 5px;
            overflow-x: auto;
        }
        .success {
            color: green;
            font-weight: bold;
        }
        .error {
            color: red;
            font-weight: bold;
        }
        h2 {
            border-bottom: 1px solid #ccc;
            padding-bottom: 5px;
        }
    </style>
</head>
<body>
    <h1>Diagnóstico de Envío de WhatsApp</h1>
    
<?php

// 1. Verificar la configuración en la base de datos
try {
    $db = new Database();
    
    echo "<h2>Verificando configuración de WhatsApp</h2>";
    
    $config = $db->query("SELECT whatsapp, instance_id, api_token, sitio_web FROM configuracion LIMIT 1")
                 ->fetch(PDO::FETCH_ASSOC);
    
    if (!$config) {
        echo "<p class='error'>No se encontró la configuración en la tabla 'configuracion'</p>";
    } else {
        echo "<p>Configuración encontrada:</p>";
        
        // Mostrar datos parciales para seguridad
        echo "<ul>";
        echo "<li><strong>Número WhatsApp Admin:</strong> " . 
             (empty($config['whatsapp']) ? 
              "<span class='error'>No configurado</span>" : 
              "<span class='success'>" . substr($config['whatsapp'], 0, 3) . "****" . substr($config['whatsapp'], -3) . "</span>") . 
             "</li>";
        
        echo "<li><strong>Instance ID:</strong> " . 
             (empty($config['instance_id']) ? 
              "<span class='error'>No configurado</span>" : 
              "<span class='success'>" . substr($config['instance_id'], 0, 5) . "..." . substr($config['instance_id'], -5) . "</span>") . 
             "</li>";
        
        echo "<li><strong>API Token:</strong> " . 
             (empty($config['api_token']) ? 
              "<span class='error'>No configurado</span>" : 
              "<span class='success'>" . substr($config['api_token'], 0, 5) . "..." . substr($config['api_token'], -5) . "</span>") . 
             "</li>";
        
        echo "<li><strong>Sitio Web:</strong> " . 
             (empty($config['sitio_web']) ? 
              "<span class='error'>No configurado</span>" : 
              "<span class='success'>" . htmlspecialchars($config['sitio_web']) . "</span>") . 
             "</li>";
        echo "</ul>";
        
        // Verificar si faltan datos críticos
        if (empty($config['instance_id']) || empty($config['api_token'])) {
            echo "<p class='error'>CRÍTICO: Faltan datos de configuración de la API de WhatsApp (instance_id o api_token)</p>";
            echo "<p>Debes configurar estos valores en la tabla 'configuracion'</p>";
        }
        
        if (empty($config['whatsapp'])) {
            echo "<p class='error'>CRÍTICO: No hay número de WhatsApp del administrador configurado</p>";
            echo "<p>Debes configurar este valor en la tabla 'configuracion'</p>";
        }
    }
    
    // 2. Prueba de envío al administrador
    if (isset($_GET['test']) && $_GET['test'] === 'admin' && !empty($config['whatsapp'])) {
        echo "<h2>Enviando mensaje de prueba al administrador</h2>";
        
        $pedido_prueba = [
            'id_pedido_comercio' => 'TEST-' . date('YmdHis'),
            'monto_total' => 100000,
            'forma_pago' => 'Prueba Técnica',
            'datos_comprador' => json_encode([
                'nombre' => 'Cliente de Prueba',
                'email' => 'prueba@example.com',
                'telefono' => $config['whatsapp'],
                'documento' => '1234567'
            ]),
            'datos_productos' => json_encode([
                [
                    'nombre' => 'Producto de Prueba',
                    'cantidad' => 1,
                    'precio_total' => 100000
                ]
            ])
        ];
        
        $resultado_whatsapp = notificarPedidoAdmin($pedido_prueba);
        printResult("Resultado de envío al administrador", $resultado_whatsapp);
    }
    
    // 3. Prueba de envío a un cliente
    if (isset($_GET['test']) && $_GET['test'] === 'cliente' && !empty($_GET['telefono'])) {
        echo "<h2>Enviando mensaje de prueba al cliente</h2>";
        
        $telefono_cliente = $_GET['telefono'];
        
        $pedido_prueba = [
            'id_pedido_comercio' => 'TEST-' . date('YmdHis'),
            'monto_total' => 100000,
            'forma_pago' => 'Prueba Técnica',
            'datos_comprador' => json_encode([
                'nombre' => 'Cliente de Prueba',
                'email' => 'prueba@example.com',
                'telefono' => $telefono_cliente,
                'documento' => '1234567'
            ]),
            'datos_productos' => json_encode([
                [
                    'nombre' => 'Producto de Prueba',
                    'cantidad' => 1,
                    'precio_total' => 100000
                ]
            ])
        ];
        
        $resultado_whatsapp = notificarPedidoCliente($pedido_prueba);
        printResult("Resultado de envío al cliente", $resultado_whatsapp);
    }

    // 4. Prueba de webhook de pagopar con un pedido simulado
    if (isset($_GET['test']) && $_GET['test'] === 'webhook') {
        echo "<h2>Simulando webhook de PagoPar</h2>";
        
        // Buscar el último pedido para usar sus datos
        $ultimo_pedido = $db->query("SELECT * FROM pedidos_pagopar ORDER BY id DESC LIMIT 1")->fetch(PDO::FETCH_ASSOC);
        
        if (!$ultimo_pedido) {
            echo "<p class='error'>No se encontró ningún pedido para simular</p>";
        } else {
            // Crear datos simulados de PagoPar
            $webhook_data = [
                'respuesta' => true,
                'resultado' => [
                    [
                        'pagado' => true,
                        'numero_comprobante_interno' => '12345',
                        'ultimo_mensaje_error' => null,
                        'forma_pago' => 'Tarjeta de Crédito (Simulado)',
                        'fecha_pago' => date('Y-m-d H:i:s'),
                        'monto' => $ultimo_pedido['monto_total'],
                        'fecha_maxima_pago' => date('Y-m-d H:i:s', strtotime('+7 days')),
                        'hash_pedido' => $ultimo_pedido['hash_pagopar'],
                        'numero_pedido' => $ultimo_pedido['id_pedido_comercio'],
                        'cancelado' => false,
                        'forma_pago_identificador' => '1',
                        'token' => $ultimo_pedido['hash_pagopar']
                    ]
                ]
            ];
            
            echo "<p>Datos de simulación:</p>";
            echo "<pre>" . json_encode($webhook_data, JSON_PRETTY_PRINT) . "</pre>";
            
            // Preparar el pedido para notificación de WhatsApp
            $pedido_para_notificacion = [
                'id_pedido_comercio' => $ultimo_pedido['id_pedido_comercio'],
                'monto_total' => $ultimo_pedido['monto_total'],
                'forma_pago' => 'Simulación de Prueba',
                'datos_comprador' => $ultimo_pedido['datos_comprador'],
                'datos_productos' => $ultimo_pedido['datos_productos']
            ];
            
            // Enviar WhatsApp al administrador
            $resultado_admin = notificarPedidoAdmin($pedido_para_notificacion);
            printResult("Resultado de notificación al administrador", $resultado_admin);
            
            // Enviar WhatsApp al cliente
            $resultado_cliente = notificarPedidoCliente($pedido_para_notificacion);
            printResult("Resultado de notificación al cliente", $resultado_cliente);
        }
    }
    
} catch (Exception $e) {
    echo "<div class='error'>";
    echo "<h3>Error:</h3>";
    echo "<p>" . $e->getMessage() . "</p>";
    echo "</div>";
}
?>

<h2>Opciones de prueba</h2>
<ul>
    <li><a href="?test=admin">Probar envío al administrador</a></li>
    <li>
        <form action="" method="get" style="margin: 10px 0;">
            <input type="hidden" name="test" value="cliente">
            <label for="telefono">Número de teléfono del cliente (incluir código de país):</label>
            <input type="text" id="telefono" name="telefono" placeholder="595991234567" required>
            <button type="submit">Probar envío al cliente</button>
        </form>
    </li>
    <li><a href="?test=webhook">Simular webhook de PagoPar</a></li>
</ul>

<h2>Solución de problemas comunes</h2>
<ol>
    <li>Asegúrate que los campos <strong>instance_id</strong> y <strong>api_token</strong> estén configurados en la tabla 'configuracion'.</li>
    <li>El número de WhatsApp del administrador debe incluir el código de país sin el '+' (ej: 595991234567).</li>
    <li>Verifica que la instancia de WhatsApp en waapi.app esté activa y conectada.</li>
    <li>Si recibes errores HTTP, verifica la conectividad a Internet desde el servidor.</li>
    <li>Los números de teléfono deben estar en formato internacional sin el '+' inicial.</li>
</ol>

</body>
</html>