// i18n.js - 다국어 지원 시스템 (Content Script 호환)
(function () {
    'use strict';
    if (window.herI18n) return;

    window.herI18n = {
        messages: {},
        currentLanguage: 'ko',
        isReady: false,

        async setUILanguage(language) {
            this.currentLanguage = language;

            try {
                // JSON 파일에서 직접 모든 키를 가져오기
                const localeUrl = chrome.runtime.getURL(`_locales/${language}/messages.json`);
                const response = await fetch(localeUrl);

                if (!response.ok) {
                    throw new Error(`HTTP ${response.status}`);
                }

                const messages = await response.json();
                this.messages = messages;

                this.isReady = true;
                window.dispatchEvent(new CustomEvent('her-language-changed', { detail: { language } }));

            } catch (e) {
                console.warn(`[i18n] 언어 ${language} 로드 실패, 기본 언어로 폴백:`, e.message);
                await this.loadFallbackLanguage();
            }
        },

        async loadFallbackLanguage() {
            try {
                // 기본 언어(ko)로 폴백
                const fallbackUrl = chrome.runtime.getURL('_locales/ko/messages.json');
                const response = await fetch(fallbackUrl);

                if (!response.ok) {
                    throw new Error(`HTTP ${response.status}`);
                }

                const messages = await response.json();
                this.messages = messages;
                this.isReady = true;
                // console.log('[i18n] 기본 언어 로드 성공');
            } catch (e) {
                console.error('[i18n] 기본 언어 로드도 실패:', e);
                // 최후의 수단으로 빈 객체 - 이것이 문제일 수 있음
                this.messages = {};
                this.isReady = true;
            }
        },

        t(key, params) {
            let msg = this.messages[key]?.message || key;
            if (params && typeof msg === 'string') {
                Object.keys(params).forEach(k => {
                    msg = msg.replace(new RegExp(`{${k}}`, 'g'), params[k]);
                });
            }
            return msg;
        },

        // 공통 시간 포맷팅 함수
        formatTime(timestamp) {
            const date = new Date(timestamp);
            const now = new Date();
            const diff = now.getTime() - date.getTime();
            const minutes = Math.floor(diff / 60000);
            const hours = Math.floor(minutes / 60);
            const days = Math.floor(hours / 24);

            if (minutes < 1) {
                return this.t('justNow');
            } else if (minutes < 60) {
                return this.t('minutesAgo', { minutes });
            } else if (hours < 24) {
                return this.t('hoursAgo', { hours });
            } else {
                return this.t('daysAgo', { days });
            }
        },

        getCurrentLanguage() {
            return this.currentLanguage || chrome.i18n.getUILanguage();
        },

        detectLanguage() {
            const browserLang = chrome.i18n.getUILanguage();
            return browserLang.startsWith('ko') ? 'ko' : 'en';
        },

        isReady() {
            return this.isReady;
        }
    };

    // 초기 언어 로드
    if (chrome.storage && chrome.storage.sync) {
        chrome.storage.sync.get(['uiLanguage'], (result) => {
            const lang = result.uiLanguage || window.herI18n.detectLanguage();
            window.herI18n.setUILanguage(lang);
        });
    } else {
        // storage API 없으면 기본 언어로 초기화
        window.herI18n.setUILanguage('ko');
    }

})();