/*
 * i18n 초기화 (react-i18next) — 킨텍스 자동전시시스템 다국어 프레임워크.
 * 지원 언어: 한국어(ko, 기본/fallback)·English(en)·中文 간체(zh)·日本語(ja).
 * 감지 우선순위: localStorage(kintex_lang) → 브라우저(navigator) → fallback ko.
 * 선택 언어는 languagedetector가 localStorage에 지속화한다(별도 store 불필요).
 *
 * 적용 패턴(다른 화면 팀 참고):
 *   import { useTranslation } from 'react-i18next';
 *   const { t } = useTranslation();
 *   <h1>{t('public.home.heroTitle')}</h1>
 * 키 네이밍: `<영역>.<화면>.<요소>` (예: public.home.heroTitle, login.title, common.actions.next).
 */
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';

import ko from './locales/ko.json';
import en from './locales/en.json';
import zh from './locales/zh.json';
import ja from './locales/ja.json';

/** 지원 언어 코드(순서 = 스위처 노출 순서). */
export const SUPPORTED_LANGS = ['ko', 'en', 'zh', 'ja'] as const;
export type LangCode = (typeof SUPPORTED_LANGS)[number];

/** 스위처 표시용 각 언어의 자국어 라벨. */
export const LANG_LABELS: Record<LangCode, string> = {
  ko: '한국어',
  en: 'English',
  zh: '中文',
  ja: '日本語',
};

/** localStorage 키(languagedetector cache) — WISE 컨벤션에 맞춘 접두사. */
export const LANG_STORAGE_KEY = 'kintex_lang';

void i18n
  .use(LanguageDetector)
  .use(initReactI18next)
  .init({
    resources: {
      ko: { translation: ko },
      en: { translation: en },
      zh: { translation: zh },
      ja: { translation: ja },
    },
    fallbackLng: 'ko',
    supportedLngs: SUPPORTED_LANGS as unknown as string[],
    // 지역 변형(en-US 등)은 기본 언어(en)로 축약.
    load: 'languageOnly',
    nonExplicitSupportedLngs: true,
    detection: {
      order: ['localStorage', 'navigator', 'htmlTag'],
      lookupLocalStorage: LANG_STORAGE_KEY,
      caches: ['localStorage'],
    },
    interpolation: {
      // React가 XSS 이스케이프를 담당하므로 비활성.
      escapeValue: false,
    },
    returnEmptyString: false,
  });

// 문서 lang 속성 동기화(접근성/SEO) — 초기값 + 변경 시.
if (typeof document !== 'undefined') {
  document.documentElement.lang = i18n.resolvedLanguage ?? 'ko';
  i18n.on('languageChanged', (lng) => {
    document.documentElement.lang = lng;
  });
}

export default i18n;
