/**
 * 🌐 PrimeSender - Internationalization (i18n) System
 * Loads translations from external JSON files (_locales/{lang}/messages.json)
 * Supports multiple languages dynamically
 * Auto-detects language from WhatsApp's HTML lang attribute
 */

const WaProI18n = (function () {
    // ============================================================
    // التخزين المحلي للغة
    // ============================================================
    const STORAGE_KEY = 'wapro_language';

    // اللغة الحالية
    let currentLang = 'ar';

    // ============================================================
    // تعريف اللغات المدعومة (مصدر وحيد للحقيقة)
    // ============================================================
    const SUPPORTED_LANGS = {
        ar: { folder: 'ar', name: 'العربية', nativeName: 'العربية', dir: 'rtl' },
        en: { folder: 'en', name: 'English', nativeName: 'English', dir: 'ltr' },
        fr: { folder: 'fr', name: 'Français', nativeName: 'Français', dir: 'ltr' },
        es: { folder: 'es', name: 'Español', nativeName: 'Español', dir: 'ltr' },
        pt: { folder: 'pt_BR', name: 'Português', nativeName: 'Português', dir: 'ltr' },
        de: { folder: 'de', name: 'Deutsch', nativeName: 'Deutsch', dir: 'ltr' },
        tr: { folder: 'tr', name: 'Türkçe', nativeName: 'Türkçe', dir: 'ltr' },
        id: { folder: 'id', name: 'Bahasa', nativeName: 'Bahasa Indonesia', dir: 'ltr' },
        ru: { folder: 'ru', name: 'Русский', nativeName: 'Русский', dir: 'ltr' },
        hi: { folder: 'hi', name: 'हिन्दी', nativeName: 'हिन्दी', dir: 'ltr' }
    };

    // الترجمات المحملة من الملفات
    let translations = {};
    Object.keys(SUPPORTED_LANGS).forEach(k => translations[k] = {});

    // حالة التحميل
    let isLoaded = false;
    let loadPromise = null;

    // ============================================================
    // تحويل المفاتيح: dots/hyphens -> underscores
    // ============================================================
    function toJsonKey(key) {
        return key.replace(/[.\-]/g, '_');
    }

    // ============================================================
    // التحقق من دعم اللغة
    // ============================================================
    function isSupported(lang) {
        return SUPPORTED_LANGS.hasOwnProperty(lang);
    }

    // ============================================================
    // تحميل ملفات الترجمة
    // ============================================================
    async function loadTranslationFile(langCode) {
        const langInfo = SUPPORTED_LANGS[langCode];
        if (!langInfo) return {};

        const folder = langInfo.folder;
        let url;

        if (typeof chrome !== 'undefined' && chrome.runtime && chrome.runtime.getURL) {
            url = chrome.runtime.getURL(`_locales/${folder}/messages.json`);
        } else {
            url = `_locales/${folder}/messages.json`;
        }

        try {
            const response = await fetch(url);
            if (!response.ok) throw new Error(`HTTP ${response.status}`);
            const data = await response.json();

            const flat = {};
            for (const [key, entry] of Object.entries(data)) {
                if (key.startsWith('@@') || key === 'extName' || key === 'extDescription') continue;
                if (entry && typeof entry === 'object' && entry.message !== undefined) {
                    flat[key] = entry.message;
                }
            }
            return flat;
        } catch (err) {
            console.warn(`⚠️ Failed to load translations for '${langCode}':`, err);
            return {};
        }
    }

    async function loadAllTranslations() {
        if (loadPromise) return loadPromise;

        loadPromise = (async () => {
            const langCodes = Object.keys(SUPPORTED_LANGS);
            const results = await Promise.all(langCodes.map(code => loadTranslationFile(code)));
            langCodes.forEach((code, i) => { translations[code] = results[i]; });
            isLoaded = true;
            const summary = langCodes.map(c => `${c.toUpperCase()}=${Object.keys(translations[c]).length}`).join(', ');
            console.log(`🌐 Translations loaded: ${summary}`);
        })();

        return loadPromise;
    }

    // ============================================================
    // الدوال
    // ============================================================

    /**
     * الكشف عن لغة واتساب من HTML element
     */
    function detectWhatsAppLanguage() {
        const htmlElement = document.documentElement;
        const lang = htmlElement.getAttribute('lang');

        if (lang) {
            for (const code of Object.keys(SUPPORTED_LANGS)) {
                if (lang.startsWith(code)) return code;
            }
        }

        // اللغة الافتراضية
        return 'ar';
    }

    /**
     * تحميل اللغة من التخزين المحلي
     */
    function loadStoredLanguage() {
        try {
            const stored = localStorage.getItem(STORAGE_KEY);
            if (stored && isSupported(stored)) {
                return stored;
            }
        } catch (e) {
            console.warn('Unable to access localStorage:', e);
        }
        return null;
    }

    /**
     * حفظ اللغة في التخزين المحلي
     */
    function saveLanguage(lang) {
        try {
            localStorage.setItem(STORAGE_KEY, lang);
        } catch (e) {
            console.warn('Unable to save to localStorage:', e);
        }
    }

    /**
     * جلب الترجمة لمفتاح معين
     */
    function t(key, fallback, variables) {
        const langData = translations[currentLang] || translations['ar'];
        const jsonKey = toJsonKey(key);
        let result = langData[jsonKey] || fallback || key;

        if (variables && typeof result === 'string') {
            for (const [vKey, vValue] of Object.entries(variables)) {
                result = result.replace(new RegExp(`\\{${vKey}\\}`, 'g'), vValue);
            }
        }
        return result;
    }

    /**
     * تعيين اللغة الحالية
     */
    function setLanguage(lang) {
        if (!isSupported(lang)) {
            console.warn(`Language '${lang}' not supported, falling back to 'ar'`);
            lang = 'ar';
        }

        currentLang = lang;
        saveLanguage(lang);

        // تحديث اتجاه الصفحة
        const panel = document.getElementById('wa-pro-panel');
        if (panel) {
            const dir = SUPPORTED_LANGS[lang].dir;
            if (dir === 'rtl') {
                panel.classList.add('wa-rtl');
                panel.classList.remove('wa-ltr');
            } else {
                panel.classList.add('wa-ltr');
                panel.classList.remove('wa-rtl');
            }
        }

        // ترجمة الصفحة
        translatePage();

        // تحديث إضافي للوحة إذا كانت موجودة
        if (typeof window.applyI18n === 'function') {
            window.applyI18n();
        }

        // تحديث زر اللغة
        updateLanguageButton();

        console.log(`🌐 Language set to: ${lang}`);
    }

    /**
     * الحصول على اللغة الحالية
     */
    function getLanguage() {
        return currentLang;
    }

    /**
     * ترجمة جميع العناصر في الصفحة
     */
    function translatePage() {
        // ترجمة العناصر التي لديها data-i18n
        document.querySelectorAll('[data-i18n]').forEach(element => {
            const key = element.getAttribute('data-i18n');
            const translation = t(key);

            if (translation && translation !== key) {
                if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {
                    element.placeholder = translation;
                } else if (element.tagName === 'OPTION') {
                    element.textContent = translation;
                } else {
                    element.textContent = translation;
                }
            }
        });

        // ترجمة العناصر التي لديها data-i18n-placeholder
        document.querySelectorAll('[data-i18n-placeholder]').forEach(element => {
            const key = element.getAttribute('data-i18n-placeholder');
            const translation = t(key);
            if (translation && translation !== key) {
                element.placeholder = translation;
            }
        });

        // ترجمة العناصر التي لديها data-i18n-title
        document.querySelectorAll('[data-i18n-title]').forEach(element => {
            const key = element.getAttribute('data-i18n-title');
            const translation = t(key);
            if (translation && translation !== key) {
                element.title = translation;
            }
        });
    }

    /**
     * تحديث زر اللغة في الواجهة
     */
    function updateLanguageButton() {
        if (typeof updateCustomLanguageDropdowns === 'function') {
            updateCustomLanguageDropdowns(currentLang);
        }
    }

    /**
     * تبديل اللغة
     */
    function toggleLanguage() {
        const codes = Object.keys(SUPPORTED_LANGS);
        const idx = codes.indexOf(currentLang);
        const newLang = codes[(idx + 1) % codes.length];
        setLanguage(newLang);

        if (typeof showToast === 'function') {
            showToast(t('toast.languageChanged'), 'success');
        }
    }

    /**
     * تهيئة نظام الترجمة
     */
    async function init() {
        await loadAllTranslations();

        let savedLang = loadStoredLanguage();
        if (savedLang) {
            currentLang = savedLang;
        } else {
            currentLang = detectWhatsAppLanguage();
        }

        console.log(`🌐 I18n initialized with language: ${currentLang}`);

        setTimeout(() => {
            translatePage();
            updateLanguageButton();
        }, 100);
    }

    /**
     * الحصول على قائمة اللغات المتاحة
     */
    function getAvailableLanguages() {
        return Object.entries(SUPPORTED_LANGS).map(([code, info]) => ({
            code,
            name: info.name,
            nativeName: info.nativeName
        }));
    }

    // ============================================================
    // API العامة
    // ============================================================
    return {
        init: init,
        t: t,
        setLanguage: setLanguage,
        getLanguage: getLanguage,
        toggleLanguage: toggleLanguage,
        translatePage: translatePage,
        detectWhatsAppLanguage: detectWhatsAppLanguage,
        getAvailableLanguages: getAvailableLanguages,
        loadAllTranslations: loadAllTranslations
    };
})();

// جعل الدوال متاحة عالمياً
window.WaProI18n = WaProI18n;
window.t = WaProI18n.t;
