<?php
/**
 * verify_meta_setup.php — Verifica que el setup de Meta esté completo.
 *
 * Uso:
 *   php migrations/verify_meta_setup.php
 */

$appDir = dirname(__DIR__) . '/app';
require_once $appDir . '/db.php';
require_once $appDir . '/services/token_crypto.php';

$ok = true;

function check(string $label, bool $pass, string $hint = ''): void {
    global $ok;
    $icon = $pass ? '✓' : '✗';
    echo "  $icon  $label\n";
    if (!$pass) {
        $ok = false;
        if ($hint) echo "       → $hint\n";
    }
}

echo "\n=== Vale · Meta Webhook Verify ===\n\n";

// ── .env vars ─────────────────────────────────────────────────────────────────
echo "[.env]\n";
check('META_WEBHOOK_VERIFY_TOKEN', (bool) getenv('META_WEBHOOK_VERIFY_TOKEN'),
    'Agregar META_WEBHOOK_VERIFY_TOKEN=vale_meta_2026 al .env');
check('TOKEN_ENCRYPTION_KEY', (bool) getenv('TOKEN_ENCRYPTION_KEY'),
    'Generar: php -r "echo base64_encode(random_bytes(32)) . PHP_EOL;"');
check('META_APP_SECRET (opcional)', (bool) getenv('META_APP_SECRET'),
    'Sin esto la firma del webhook no se valida (inseguro en producción)');

// ── DB ────────────────────────────────────────────────────────────────────────
echo "\n[Base de datos]\n";
$db = DB::connect();

$tables = ['tenant_whatsapp', 'vale_config', 'conversations', 'tenant_whatsapp'];
foreach ($tables as $t) {
    $exists = (bool) $db->query("SHOW TABLES LIKE '$t'")->fetch();
    check("Tabla $t", $exists, "Correr migrations/015_tenant_whatsapp.sql");
}

// Columnas de vale_config
$cols = $db->query("SHOW COLUMNS FROM vale_config")->fetchAll(PDO::FETCH_COLUMN);
$needed = ['knowledge', 'responder_en_idioma_del_cliente', 'reglas_escalado', 'booking_activo', 'duracion_slot', 'calendar_id'];
foreach ($needed as $col) {
    check("vale_config.$col", in_array($col, $cols, true),
        'Correr migrations/013_agent_config.sql');
}

// Columna window_expires_at en conversations
$cols2 = $db->query("SHOW COLUMNS FROM conversations")->fetchAll(PDO::FETCH_COLUMN);
check('conversations.window_expires_at', in_array('window_expires_at', $cols2, true),
    'Correr migrations/013_agent_config.sql');

// ── tenant_whatsapp rows ──────────────────────────────────────────────────────
echo "\n[Tenants configurados en Meta]\n";
$rows = $db->query(
    "SELECT tw.phone_number_id, tw.waba_id, tw.status, t.name
     FROM tenant_whatsapp tw JOIN tenants t ON t.id = tw.tenant_id"
)->fetchAll();

if (empty($rows)) {
    echo "  ✗  Sin registros — correr: php migrations/seed_meta_demo.php\n";
    $ok = false;
} else {
    foreach ($rows as $r) {
        $tokenOk = false;
        try {
            $enc = $db->query(
                "SELECT access_token FROM tenant_whatsapp WHERE phone_number_id = '{$r['phone_number_id']}'"
            )->fetchColumn();
            TokenCrypto::decrypt($enc);
            $tokenOk = true;
        } catch (Throwable $e) {
            // token no descifrable
        }
        check(
            "{$r['name']} · {$r['phone_number_id']} · {$r['status']}",
            $tokenOk,
            'Token no descifrable. Re-correr el seed con la TOKEN_ENCRYPTION_KEY correcta.'
        );
    }
}

// ── Resultado ─────────────────────────────────────────────────────────────────
echo "\n" . ($ok ? "✅  Todo OK — Vale está listo para recibir mensajes de Meta.\n" : "❌  Hay errores. Revisá los puntos marcados con ✗.\n") . "\n";
