/**
 * useCountryFlag — ISO 3166-1 alpha-2 ülke kodu yardımcıları.
 *
 * `flag-icons` (CC0, lipis) SVG bayrak setine bağlanır. Vite tüm SVG dosyalarını
 * `import.meta.glob` ile statik olarak çözümler ve bundle eder.
 *
 * Windows native font'unda emoji flag glyph'i bulunmadığı için emoji yaklaşımı
 * "TR" yazısı gösterir; SVG yaklaşımı tüm OS'larda tutarlı render eder.
 *
 * Kullanım:
 *   const { flagUrl, flagEmoji, countryName, hasFlag } = useCountryFlag()
 *   <img :src="flagUrl('TR')" alt="TR" class="w-6 h-4 rounded" />
 *   flagEmoji('TR')           // '🇹🇷' (Linux/macOS/iOS/Android)
 *   countryName('TR')         // 'Türkiye'
 */

// Vite resolves all SVG file URLs at build time. `eager: true` inlines them as
// asset URLs. Key format: '/node_modules/flag-icons/flags/4x3/tr.svg'.
const SVG_MODULES = import.meta.glob(
    '/node_modules/flag-icons/flags/4x3/*.svg',
    { eager: true, query: '?url', import: 'default' },
)

// Build code → URL map: { 'tr': '/build/assets/tr-AbCdEfGh.svg', ... }
const FLAG_URLS = Object.fromEntries(
    Object.entries(SVG_MODULES).map(([path, url]) => {
        const cc = path.split('/').pop().replace('.svg', '')
        return [cc, url]
    }),
)

// Fallback: 4:3 gri kutu (unknown flag)
const UNKNOWN_FLAG_DATA_URL =
    'data:image/svg+xml,' +
    encodeURIComponent(
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4 3">' +
        '<rect width="4" height="3" fill="#cbd5e1"/>' +
        '<text x="2" y="2.1" text-anchor="middle" font-size="1.4" fill="#475569" font-family="sans-serif">?</text>' +
        '</svg>',
    )

export function useCountryFlag() {
    const isValidCode = (code) =>
        typeof code === 'string' && code.length === 2 && /^[A-Za-z]{2}$/.test(code)

    /**
     * Vite tarafından bundle edilmiş SVG bayrak URL'si döner.
     * `<img :src="flagUrl('TR')" />` şeklinde kullan.
     */
    const flagUrl = (code) => {
        if (! isValidCode(code)) return UNKNOWN_FLAG_DATA_URL
        const url = FLAG_URLS[code.toLowerCase()]
        return url || UNKNOWN_FLAG_DATA_URL
    }

    /** SVG'nin pakette mevcut olup olmadığı (kod formatı doğruysa ve dosya varsa true). */
    const hasFlag = (code) =>
        isValidCode(code) && Boolean(FLAG_URLS[code.toLowerCase()])

    /**
     * Unicode bayrak emoji (yalnızca Linux/macOS/iOS/Android'de gerçek bayrak;
     * Windows'ta iki harfli ülke kodu render edilir — bilinçli kullanım için tutuluyor).
     */
    const flagEmoji = (code) => {
        if (! isValidCode(code)) return '🏳️'
        const base = 127397
        const upper = code.toUpperCase()
        return String.fromCodePoint(
            upper.charCodeAt(0) + base,
            upper.charCodeAt(1) + base,
        )
    }

    /**
     * En sık kullanılan ülkeler için Türkçe ad. Eşleşme yoksa kod döner.
     */
    const COUNTRY_NAMES_TR = {
        TR: 'Türkiye',     US: 'ABD',           GB: 'İngiltere',   DE: 'Almanya',
        FR: 'Fransa',      IT: 'İtalya',        ES: 'İspanya',     NL: 'Hollanda',
        RU: 'Rusya',       CN: 'Çin',           JP: 'Japonya',     KR: 'Güney Kore',
        KP: 'Kuzey Kore',  BR: 'Brezilya',      IN: 'Hindistan',   CA: 'Kanada',
        AU: 'Avustralya',  MX: 'Meksika',       AR: 'Arjantin',    ZA: 'Güney Afrika',
        EG: 'Mısır',       SA: 'Suudi Arabistan', AE: 'BAE',       IL: 'İsrail',
        IR: 'İran',        PK: 'Pakistan',      BD: 'Bangladeş',   ID: 'Endonezya',
        TH: 'Tayland',     VN: 'Vietnam',       PH: 'Filipinler',  MY: 'Malezya',
        SG: 'Singapur',    PL: 'Polonya',       UA: 'Ukrayna',     GR: 'Yunanistan',
        AZ: 'Azerbaycan',  KZ: 'Kazakistan',    BE: 'Belçika',     PT: 'Portekiz',
        SE: 'İsveç',       NO: 'Norveç',        DK: 'Danimarka',   FI: 'Finlandiya',
        CH: 'İsviçre',     AT: 'Avusturya',     CZ: 'Çekya',       RO: 'Romanya',
        HU: 'Macaristan',  BG: 'Bulgaristan',   IE: 'İrlanda',     NZ: 'Yeni Zelanda',
        CL: 'Şili',        CO: 'Kolombiya',     PE: 'Peru',        VE: 'Venezuela',
        NG: 'Nijerya',     KE: 'Kenya',         MA: 'Fas',         DZ: 'Cezayir',
        TN: 'Tunus',       QA: 'Katar',         KW: 'Kuveyt',      JO: 'Ürdün',
        LB: 'Lübnan',      SY: 'Suriye',        IQ: 'Irak',        AF: 'Afganistan',
        UZ: 'Özbekistan',  TM: 'Türkmenistan',  KG: 'Kırgızistan', TJ: 'Tacikistan',
        MN: 'Moğolistan',  HK: 'Hong Kong',     TW: 'Tayvan',      LK: 'Sri Lanka',
    }

    const countryName = (code) => {
        if (! code || typeof code !== 'string') return ''
        const upper = code.toUpperCase()
        return COUNTRY_NAMES_TR[upper] || upper
    }

    // Backwards-compat alias'lar — eski kod `flag()` / `flagClass()` çağırabilir.
    const flag = flagEmoji
    const flagClass = (code) =>
        isValidCode(code) ? `fi fi-${code.toLowerCase()}` : 'fi fi-xx'

    return { flagUrl, flagEmoji, flag, flagClass, hasFlag, countryName }
}
