<?php
// Prevent direct access
if (count(get_included_files()) === 1) {
    http_response_code(403);
    exit('Forbidden');
}

/**
 * Catálogo de países.
 *
 * Campos por país:
 *   name         Nombre en español
 *   flag         Emoji de bandera
 *   tz           Zona horaria IANA (usar siempre nombrada, nunca offset fijo)
 *   currency     ISO 4217
 *   simbolo      Símbolo para mostrar en UI (C$, L, $, €…)
 *   cod_telefono Prefijo internacional sin + (505, 504, 503, 1…)
 *   perfil_voz   es-CA | es-US | en-US  (cascadea al agente de Vale)
 *   wa_tier      'ca' | 'us'  (tier de costo de mensajes WhatsApp)
 *   activo_vale  true si Vale opera en este país actualmente
 */
class Countries {

    /** Países donde Vale opera activamente. */
    const VALE_MARKETS = ['NI', 'HN', 'SV', 'US'];

    public static function all(): array {
        return [
            // ── Mercados activos de Vale ──────────────────────────────────────
            'NI' => [
                'name' => 'Nicaragua',      'flag' => '🇳🇮',
                'tz'   => 'America/Managua',
                'currency' => 'NIO', 'simbolo' => 'C$',
                'cod_telefono' => '505',
                'perfil_voz'   => 'es-CA',
                'wa_tier'      => 'ca',
                'activo_vale'  => true,
            ],
            'HN' => [
                'name' => 'Honduras',       'flag' => '🇭🇳',
                'tz'   => 'America/Tegucigalpa',
                'currency' => 'HNL', 'simbolo' => 'L',
                'cod_telefono' => '504',
                'perfil_voz'   => 'es-CA',
                'wa_tier'      => 'ca',
                'activo_vale'  => true,
            ],
            'SV' => [
                'name' => 'El Salvador',    'flag' => '🇸🇻',
                'tz'   => 'America/El_Salvador',
                'currency' => 'USD', 'simbolo' => '$',
                'cod_telefono' => '503',
                'perfil_voz'   => 'es-CA',
                'wa_tier'      => 'ca',
                'activo_vale'  => true,
            ],
            'US' => [
                'name' => 'Estados Unidos', 'flag' => '🇺🇸',
                'tz'   => 'America/New_York',   // default; el tenant puede tener su propia TZ
                'currency' => 'USD', 'simbolo' => '$',
                'cod_telefono' => '1',
                'perfil_voz'   => 'en-US',       // tuteo en inglés; Latino US → es-US si locale=es
                'wa_tier'      => 'us',
                'activo_vale'  => true,
            ],
            // ── Resto del catálogo (wizard, onboarding extendido) ─────────────
            'AR' => ['name' => 'Argentina',       'flag' => '🇦🇷', 'tz' => 'America/Argentina/Buenos_Aires', 'currency' => 'ARS', 'simbolo' => '$', 'cod_telefono' => '54',  'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'MX' => ['name' => 'México',          'flag' => '🇲🇽', 'tz' => 'America/Mexico_City',           'currency' => 'MXN', 'simbolo' => '$', 'cod_telefono' => '52',  'perfil_voz' => 'es-US', 'wa_tier' => 'ca', 'activo_vale' => false],
            'CO' => ['name' => 'Colombia',        'flag' => '🇨🇴', 'tz' => 'America/Bogota',               'currency' => 'COP', 'simbolo' => '$', 'cod_telefono' => '57',  'perfil_voz' => 'es-US', 'wa_tier' => 'ca', 'activo_vale' => false],
            'CL' => ['name' => 'Chile',           'flag' => '🇨🇱', 'tz' => 'America/Santiago',             'currency' => 'CLP', 'simbolo' => '$', 'cod_telefono' => '56',  'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'PE' => ['name' => 'Perú',            'flag' => '🇵🇪', 'tz' => 'America/Lima',                 'currency' => 'PEN', 'simbolo' => 'S/', 'cod_telefono' => '51', 'perfil_voz' => 'es-US', 'wa_tier' => 'ca', 'activo_vale' => false],
            'UY' => ['name' => 'Uruguay',         'flag' => '🇺🇾', 'tz' => 'America/Montevideo',           'currency' => 'UYU', 'simbolo' => '$', 'cod_telefono' => '598', 'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'EC' => ['name' => 'Ecuador',         'flag' => '🇪🇨', 'tz' => 'America/Guayaquil',            'currency' => 'USD', 'simbolo' => '$', 'cod_telefono' => '593', 'perfil_voz' => 'es-US', 'wa_tier' => 'ca', 'activo_vale' => false],
            'VE' => ['name' => 'Venezuela',       'flag' => '🇻🇪', 'tz' => 'America/Caracas',              'currency' => 'USD', 'simbolo' => '$', 'cod_telefono' => '58',  'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'CR' => ['name' => 'Costa Rica',      'flag' => '🇨🇷', 'tz' => 'America/Costa_Rica',           'currency' => 'CRC', 'simbolo' => '₡', 'cod_telefono' => '506', 'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'GT' => ['name' => 'Guatemala',       'flag' => '🇬🇹', 'tz' => 'America/Guatemala',            'currency' => 'GTQ', 'simbolo' => 'Q', 'cod_telefono' => '502', 'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'PA' => ['name' => 'Panamá',          'flag' => '🇵🇦', 'tz' => 'America/Panama',               'currency' => 'USD', 'simbolo' => '$', 'cod_telefono' => '507', 'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'DO' => ['name' => 'Rep. Dominicana', 'flag' => '🇩🇴', 'tz' => 'America/Santo_Domingo',        'currency' => 'DOP', 'simbolo' => '$', 'cod_telefono' => '1',   'perfil_voz' => 'es-US', 'wa_tier' => 'ca', 'activo_vale' => false],
            'PR' => ['name' => 'Puerto Rico',     'flag' => '🇵🇷', 'tz' => 'America/Puerto_Rico',          'currency' => 'USD', 'simbolo' => '$', 'cod_telefono' => '1',   'perfil_voz' => 'es-US', 'wa_tier' => 'us', 'activo_vale' => false],
            'BO' => ['name' => 'Bolivia',         'flag' => '🇧🇴', 'tz' => 'America/La_Paz',               'currency' => 'BOB', 'simbolo' => 'Bs', 'cod_telefono' => '591', 'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'PY' => ['name' => 'Paraguay',        'flag' => '🇵🇾', 'tz' => 'America/Asuncion',             'currency' => 'PYG', 'simbolo' => '₲', 'cod_telefono' => '595', 'perfil_voz' => 'es-CA', 'wa_tier' => 'ca', 'activo_vale' => false],
            'ES' => ['name' => 'España',          'flag' => '🇪🇸', 'tz' => 'Europe/Madrid',                'currency' => 'EUR', 'simbolo' => '€', 'cod_telefono' => '34',  'perfil_voz' => 'es-US', 'wa_tier' => 'ca', 'activo_vale' => false],
        ];
    }

    public static function get(string $code): ?array {
        return self::all()[strtoupper($code)] ?? null;
    }

    /** Devuelve solo los mercados donde Vale opera activamente. */
    public static function valeMarkets(): array {
        return array_filter(self::all(), fn($c) => $c['activo_vale']);
    }

    /**
     * Detecta el código de país a partir de un número E.164 (sin +).
     * Retorna el código ISO de 2 letras o null si no hay match.
     * Prioriza los prefijos más largos (evita falsos positivos con +1).
     */
    public static function detectFromPhone(string $phoneDigits): ?string {
        $digits = preg_replace('/\D/', '', $phoneDigits);
        // Ordenar por longitud de cod_telefono DESC para match correcto
        $sorted = self::all();
        uasort($sorted, fn($a, $b) => strlen($b['cod_telefono']) <=> strlen($a['cod_telefono']));
        foreach ($sorted as $iso => $c) {
            if (str_starts_with($digits, $c['cod_telefono'])) {
                return $iso;
            }
        }
        return null;
    }
}
