<?php
/**
 * ============================================================================
 * TEST: WhatsApp Cloud API
 * ============================================================================
 *
 * Cómo ejecutar:
 *   cd /home/techuyho/patupelo.es/patupelo-bot
 *   php tests/test_whatsapp.php
 *
 * Qué hace:
 *   1. Verifica la conexión a Meta consultando los datos del número de teléfono.
 *   2. Envía un mensaje de texto al número operador (rol Eduardo).
 *   3. Envía un mensaje interactivo con 3 botones (Confirmar/Editar/Rechazar)
 *      al mismo número.
 *
 * Esperado: ver los dos mensajes en tu WhatsApp del número operador
 *           (+598 95 913 132 según env.php).
 *
 * Importante: tu número debe estar agregado como destinatario autorizado
 * en el panel de WhatsApp de Meta (API Setup → To → Manage phone number list).
 * Si no lo está, Meta va a aceptar el request pero el mensaje nunca llega.
 * ============================================================================
 */

require_once __DIR__ . '/../config/bootstrap.php';
require_once BOT_ROOT . '/lib/integrations/whatsapp_client.php';

echo "\n";
echo "==============================================================\n";
echo "  PATUPELO BOT - Test de WhatsApp Cloud API\n";
echo "==============================================================\n\n";

$operatorPhone = (string) bot_config('simulation.operator_phone');
echo "Destino: +{$operatorPhone}\n";
echo "Número del bot: " . bot_config('whatsapp.phone_number_id') . " (Phone Number ID)\n\n";

// ----------------------------------------------------------------------------
// 1. Verificar que el token y phone_number_id funcionan
// ----------------------------------------------------------------------------
echo "[1/3] Verificando credenciales contra Meta...\n";
$check = wa_request('GET', bot_config('whatsapp.phone_number_id'));

if (!$check['ok']) {
    echo "  ✗ FALLO: " . $check['error'] . "\n";
    echo "  HTTP: " . $check['http'] . "\n";
    echo "  Raw response: " . substr($check['raw'] ?? '', 0, 500) . "\n";
    echo "\n  Causas típicas:\n";
    echo "    - access_token inválido o sin permisos.\n";
    echo "    - phone_number_id incorrecto en env.php.\n";
    echo "    - El System User no tiene asignada la WABA.\n\n";
    exit(1);
}

$displayName = $check['data']['display_phone_number'] ?? '?';
$verifiedName = $check['data']['verified_name'] ?? '?';
echo "  ✓ Conexión OK\n";
echo "    Display: {$displayName}\n";
echo "    Nombre verificado: {$verifiedName}\n";
echo "    Latencia: {$check['duration_ms']}ms\n\n";

// ----------------------------------------------------------------------------
// 2. Enviar mensaje de texto simple
// ----------------------------------------------------------------------------
echo "[2/3] Enviando mensaje de texto al operador...\n";
$textResult = wa_send_text(
    $operatorPhone,
    "🤖 Test del bot Patupelo\n\n" .
    "Si recibes este mensaje, la integración con WhatsApp Cloud API funciona correctamente.\n\n" .
    "Hora local del servidor: " . date('Y-m-d H:i:s') . " (Europe/Madrid)"
);

if (!$textResult['ok']) {
    echo "  ✗ FALLO: " . $textResult['error'] . "\n";
    echo "  HTTP: " . $textResult['http'] . "\n";
    echo "  Raw: " . substr($textResult['raw'] ?? '', 0, 500) . "\n\n";
} else {
    $msgId = $textResult['data']['messages'][0]['id'] ?? '?';
    echo "  ✓ Texto enviado\n";
    echo "    wamid: {$msgId}\n";
    echo "    Latencia: {$textResult['duration_ms']}ms\n\n";
}

// Pequeña pausa para que llegue antes que el siguiente
sleep(1);

// ----------------------------------------------------------------------------
// 3. Enviar mensaje interactivo con 3 botones
// ----------------------------------------------------------------------------
echo "[3/3] Enviando mensaje interactivo con botones...\n";

$buttonsResult = wa_send_interactive_buttons(
    $operatorPhone,
    "🛒 *Pedido de prueba*\n\n" .
    "Cliente: María González (peluquería demo)\n\n" .
    "1. Genus Shampoo Hidratante 500ml × 2\n" .
    "2. Maxy Look Mascarilla × 3\n" .
    "3. Acondicionador (baja confianza ⚠️) × 1\n\n" .
    "_Total: 3 líneas, 6 unidades_",
    [
        ['id' => 'order_test_confirm', 'title' => '✅ Confirmar'],
        ['id' => 'order_test_edit',    'title' => '✏️ Editar'],
        ['id' => 'order_test_reject',  'title' => '❌ Rechazar'],
    ],
    'Patupelo · Pedido nuevo',  // header
    'Test del Sprint 1'           // footer
);

if (!$buttonsResult['ok']) {
    echo "  ✗ FALLO: " . $buttonsResult['error'] . "\n";
    echo "  HTTP: " . $buttonsResult['http'] . "\n";
    echo "  Raw: " . substr($buttonsResult['raw'] ?? '', 0, 500) . "\n\n";
} else {
    $msgId = $buttonsResult['data']['messages'][0]['id'] ?? '?';
    echo "  ✓ Mensaje con botones enviado\n";
    echo "    wamid: {$msgId}\n";
    echo "    Latencia: {$buttonsResult['duration_ms']}ms\n\n";
}

// ----------------------------------------------------------------------------
echo "==============================================================\n";
echo "  RESULTADO\n";
echo "==============================================================\n";
echo "  Revisá tu WhatsApp en +{$operatorPhone}.\n";
echo "  Deberías ver 2 mensajes nuevos del bot.\n";
echo "\n";
echo "  Si NO los recibís pero los tests dieron OK:\n";
echo "    - El número no está agregado como destinatario autorizado en Meta.\n";
echo "    - O hay un problema de entrega del lado de Meta (suele resolverse en minutos).\n";
echo "==============================================================\n\n";

exit(($textResult['ok'] && $buttonsResult['ok']) ? 0 : 1);
