<?php
/**
 * Debug: flujo WA kiosko → consentimiento_turno
 * Acceso: /debug_turno_wa.php  (solo admins)
 */
require_once __DIR__ . '/config/config.php';
if (!isUserLoggedIn()) { header('Location: login.php'); exit; }

header('Content-Type: text/plain; charset=utf-8');

$pdo = Database::getInstance()->getConnection();

echo "════════════════════════════════════════\n";
echo " DEBUG: Turno WA → consentimiento_turno [usite]\n";
echo "════════════════════════════════════════\n\n";

// ── 1. Config WA turnero ──────────────────────────────────────
echo "1. CONFIGURACIÓN WHATSAPP\n";
echo "─────────────────────────\n";
// Token y phone IDs viven en system_config; resto en lab_config
$sysCfg = $pdo->query(
    "SELECT config_key AS k, config_value AS v FROM system_config
      WHERE config_key IN ('whatsapp_token','whatsapp_phone_number_id','whatsapp_phone_number_id_turnero')"
)->fetchAll(PDO::FETCH_KEY_PAIR);

$labCfg = $pdo->query(
    "SELECT clave AS k, valor AS v FROM lab_config
      WHERE clave IN ('turnero_wa_template','turnero_wa_lang','turnero_wa_kiosko_enabled')"
)->fetchAll(PDO::FETCH_KEY_PAIR);

$cfg = array_merge($sysCfg, $labCfg);

$tokenLen = strlen($cfg['whatsapp_token'] ?? '');
echo "Token WA:              " . ($tokenLen > 0 ? "✅ presente ({$tokenLen} chars)" : "❌ VACÍO") . "\n";
echo "Phone ID principal:    " . ($cfg['whatsapp_phone_number_id'] ?? '❌ no configurado') . "\n";
echo "Phone ID turnero:      " . ($cfg['whatsapp_phone_number_id_turnero'] ?? '⚠️  no configurado (usará principal)') . "\n";
echo "Plantilla turno:       " . ($cfg['turnero_wa_template'] ?? 'consentimiento_turno (default)') . "\n";
echo "Idioma:                " . ($cfg['turnero_wa_lang'] ?? 'es_CO (default)') . "\n";
echo "Kiosko WA habilitado:  " . (($cfg['turnero_wa_kiosko_enabled'] ?? '0') === '1' ? '✅ SÍ' : '❌ NO') . "\n\n";

// ── 2. Plantilla en BD ────────────────────────────────────────
echo "2. PLANTILLA EN BASE DE DATOS\n";
echo "──────────────────────────────\n";
$tplNombre = $cfg['turnero_wa_template'] ?? 'consentimiento_turno';
$tpl = $pdo->prepare("SELECT template_name, language_code, status, body_text FROM message_templates WHERE template_name = ? LIMIT 1");
$tpl->execute([$tplNombre]);
$tplRow = $tpl->fetch(PDO::FETCH_ASSOC);
if ($tplRow) {
    echo "✅ Encontrada: {$tplRow['template_name']} [{$tplRow['language_code']}] estado={$tplRow['status']}\n";
    echo "Body: " . substr($tplRow['body_text'] ?? '', 0, 200) . "\n";
} else {
    echo "❌ Plantilla '{$tplNombre}' NO encontrada en message_templates\n";
}
echo "\n";

// ── 3. Formularios de recepción configurados ──────────────────
echo "3. FORMULARIOS DE CONSENTIMIENTO EN RECEPCIÓN\n";
echo "───────────────────────────────────────────────\n";
$forms = $pdo->query(
    "SELECT l.nombre AS desk, f.id, f.nombre AS formulario, f.is_active
       FROM turnero_lugar_consentimientos tlc
       JOIN turnero_lugares l ON l.id = tlc.lugar_id AND l.tipo = 'recepcion'
       JOIN lab_formularios f ON f.id = tlc.formulario_id
      ORDER BY l.nombre, f.nombre"
)->fetchAll(PDO::FETCH_ASSOC);

if ($forms) {
    foreach ($forms as $r) {
        $act = $r['is_active'] ? '✅' : '⚠️ inactivo';
        echo "  {$act}  Desk: {$r['desk']}  →  [{$r['id']}] {$r['formulario']}\n";
    }
} else {
    echo "❌ Ningún formulario configurado en desks de recepción\n";
    echo "   Ve a Configuración → Sesión y vincula un formulario al desk de recepción\n";
}
echo "\n";

// ── 4. Últimos consentimientos creados desde kiosko ───────────
echo "4. ÚLTIMOS CONSENTIMIENTOS CREADOS (recientes)\n";
echo "─────────────────────────────────────────────────\n";
try {
    $rows = $pdo->query(
        "SELECT tc.id, tc.turno_id, tc.estado, tc.enviado_at,
                tt.codigo, tt.paciente_nombre, tt.paciente_cel,
                f.nombre AS formulario
           FROM turnero_consentimientos tc
           JOIN turnero_turnos tt ON tt.id = tc.turno_id
           JOIN lab_formularios f ON f.id = tc.formulario_id
          ORDER BY tc.id DESC
          LIMIT 10"
    )->fetchAll(PDO::FETCH_ASSOC);

    if ($rows) {
        foreach ($rows as $r) {
            echo "  Turno {$r['codigo']} | {$r['paciente_nombre']} | cel={$r['paciente_cel']}\n";
            echo "    Formulario: {$r['formulario']}\n";
            echo "    Estado: {$r['estado']}  |  Enviado: " . ($r['enviado_at'] ?? 'NO') . "\n\n";
        }
    } else {
        echo "  Sin registros\n";
    }
} catch (\Throwable $e) {
    echo "  ❌ Error SQL: " . $e->getMessage() . "\n";
}
echo "\n";

// ── 4b. Diagnóstico tabla turnero_consentimientos ─────────────
echo "4b. DIAGNÓSTICO TABLA Y TURNOS RECIENTES\n";
echo "──────────────────────────────────────────\n";

// Verificar que la tabla existe y tiene las columnas esperadas
try {
    $cols = $pdo->query("DESCRIBE turnero_consentimientos")->fetchAll(PDO::FETCH_COLUMN);
    echo "Columnas: " . implode(', ', $cols) . "\n";
} catch (\Throwable $e) {
    echo "❌ Error al leer tabla: " . $e->getMessage() . "\n";
}

// Últimos turnos de hoy (con o sin consentimiento)
$hoyTurnos = $pdo->query(
    "SELECT tt.id, tt.codigo, tt.paciente_nombre, tt.paciente_cel, tt.creado_at,
            (SELECT COUNT(*) FROM turnero_consentimientos tc WHERE tc.turno_id = tt.id) AS tiene_consent
       FROM turnero_turnos tt
      WHERE DATE(tt.creado_at) = CURDATE()
      ORDER BY tt.id DESC
      LIMIT 10"
)->fetchAll(PDO::FETCH_ASSOC);
echo "\nÚltimos 10 turnos de hoy:\n";
if ($hoyTurnos) {
    foreach ($hoyTurnos as $t) {
        $cel = $t['paciente_cel'] ?: '(sin cel)';
        $con = $t['tiene_consent'] ? '✅ consent' : '❌ sin consent';
        echo "  [{$t['id']}] {$t['codigo']} | {$t['paciente_nombre']} | cel={$cel} | {$con} | {$t['creado_at']}\n";
    }
} else {
    echo "  Sin turnos hoy\n";
}

// Test de inserción directa
echo "\nTest inserción en turnero_consentimientos:\n";
if ($hoyTurnos) {
    $turnoTest = $hoyTurnos[0];
    $formTest  = $forms[0] ?? null;
    if ($formTest) {
        try {
            $testToken = 'DEBUG-TEST-' . time();
            $ins = $pdo->prepare(
                "INSERT IGNORE INTO turnero_consentimientos
                    (turno_id, formulario_id, token, estado)
                 VALUES (?, ?, ?, 'pendiente')"
            );
            $ins->execute([$turnoTest['id'], $formTest['id'], $testToken]);
            if ($ins->rowCount()) {
                $pdo->prepare("DELETE FROM turnero_consentimientos WHERE token = ?")->execute([$testToken]);
                echo "  ✅ Inserción OK (se insertó y eliminó el registro de prueba)\n";
            } else {
                echo "  ⚠️ INSERT IGNORE no insertó (¿registro duplicado para turno {$turnoTest['id']}?)\n";
            }
        } catch (\Throwable $e) {
            echo "  ❌ Error al insertar: " . $e->getMessage() . "\n";
        }
    } else {
        echo "  ⚠️ No hay formularios de recepción configurados (sección 3)\n";
    }
} else {
    echo "  ⚠️ Sin turnos hoy para probar\n";
}

// Mostrar teléfono del paciente por documento
$docBuscar = $_GET['doc'] ?? '1095819405';
echo "\nPaciente doc={$docBuscar} en lab_pacientes:\n";
try {
    $stmtPac = $pdo->prepare(
        "SELECT id, nombre_completo, telefono, numero_documento FROM lab_pacientes WHERE numero_documento = ? AND is_active = 1 LIMIT 1"
    );
    $stmtPac->execute([$docBuscar]);
    $pacInfo = $stmtPac->fetch(PDO::FETCH_ASSOC);
    if ($pacInfo) {
        echo "  ID: {$pacInfo['id']} | Nombre: {$pacInfo['nombre_completo']}\n";
        echo "  Teléfono registrado: " . ($pacInfo['telefono'] ?: '(vacío — por eso no llega WA)') . "\n";
        if (!$pacInfo['telefono']) {
            echo "  → Para que llegue WA, actualiza el teléfono de este paciente a 3168950803\n";
        }
    } else {
        echo "  ❌ Paciente con documento '{$docBuscar}' no encontrado en lab_pacientes\n";
    }
} catch (\Throwable $e) {
    echo "  ❌ " . $e->getMessage() . "\n";
}

// Versión del archivo create_turno.php
echo "\nVersión create_turno.php: " . date('Y-m-d H:i:s', filemtime(__DIR__ . '/modules/turnero/api/create_turno.php')) . "\n";
echo "\n";

// ── 5. Test de envío ──────────────────────────────────────────
if (isset($_GET['test_cel'])) {
    echo "5. TEST DE ENVÍO\n";
    echo "─────────────────\n";
    $testCel = trim($_GET['test_cel']);
    $testTpl  = $cfg['turnero_wa_template'] ?? 'consentimiento_turno';
    // Usar el idioma real de la plantilla aprobada en Meta
    $testLang = $tplRow['language_code'] ?? ($cfg['turnero_wa_lang'] ?? 'es');

    require_once __DIR__ . '/services/WhatsAppService.php';
    $baseUrl  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
    $testLink = $baseUrl . '/ver_formulario_enviado.php?token=TEST123';

    echo "Plantilla:  {$testTpl} [{$testLang}]\n";
    echo "Body:       " . ($tplRow['body_text'] ?? '—') . "\n";
    echo "Params:     ['A001']\n";
    echo "URL botón:  {$testLink}\n\n";

    require_once __DIR__ . '/services/WhatsAppService.php';
    try {
        $wa = new WhatsAppService('turnero');
        $rawComps = [
            ['type' => 'body', 'parameters' => [['type' => 'text', 'text' => 'A001']]]
        ];
        $rawComps[] = [
            'type'       => 'button',
            'sub_type'   => 'url',
            'index'      => '0',
            'parameters' => [['type' => 'text', 'text' => 'TEST123']],
        ];
        $wa->sendTemplateMessage($testCel, $testTpl, $testLang, [], [], $rawComps);
        echo "✅ Mensaje enviado a {$testCel}\n";
    } catch (\Throwable $e) {
        echo "❌ Error: " . $e->getMessage() . "\n";
    }
} else {
    echo "5. TEST DE ENVÍO\n";
    echo "─────────────────\n";
    echo "Agrega ?test_cel=573001234567 a la URL para enviar un mensaje de prueba\n";
}

echo "\n════ FIN ════\n";
