"""
Internationalization support.
"""

LANGUAGES = {
    "en": "English",
    "ja": "日本語",
    "zh": "中文",
    "ko": "한국어",
    "es": "Español",
    "fr": "Français",
    "de": "Deutsch",
    "pt": "Português",
}

TRANSLATIONS = {
    "en": {
        "title": "Universal Code Migrator",
        "source_lang": "Source Language",
        "target_lang": "Target Language",
        "input_folder": "Input Folder",
        "output_folder": "Output Folder",
        "browse": "Browse...",
        "api_key": "API Key (or set ANTHROPIC_API_KEY env)",
        "model": "Model",
        "encoding": "Source Encoding",
        "extra_instructions": "Extra Instructions (optional)",
        "run": "Start Migration",
        "cancel": "Cancel",
        "clear_log": "Clear Log",
        "folder_frame": "Folder Selection",
        "lang_frame": "Language Pair",
        "api_frame": "API Settings",
        "options_frame": "Options",
        "log_frame": "Log",
        "status_ready": "Ready",
        "status_running": "Running...",
        "status_done": "Done",
        "status_cancelled": "Cancelled",
        "log_start": "Starting migration: {src} → {tgt}",
        "log_scanning": "Scanning for files...",
        "log_found": "Found {n} file(s) to convert.",
        "log_processing": "[{i}/{n}] Processing: {file}",
        "log_success": "  ✓ OK → {out}",
        "log_error": "  ✗ ERROR: {err}",
        "log_skip": "  - SKIP: {reason}",
        "log_complete": "Migration complete. Success: {s}, Errors: {e}, Skipped: {k}",
        "log_cancel_request": "Cancel requested...",
        "err_no_input": "Please select an input folder.",
        "err_no_output": "Please select an output folder.",
        "err_no_source": "Please select a source language.",
        "err_no_target": "Please select a target language.",
        "err_same_lang": "Source and target languages must be different.",
        "err_no_files": "No matching files found in input folder.",
        "browse_input_title": "Select Input Folder",
        "browse_output_title": "Select Output Folder",
        "ui_lang": "UI Language",
        "auto_detect": "(Auto-detect)",
        "resume": "Resume (skip converted)",
        "context": "Context injection",
        "ecosystem": "Ecosystem files",
        "log_resume_enabled": "Resume mode: will skip already-converted files.",
        "log_context_enabled": "Context mode: priority files (config/constants) converted first.",
        "log_ecosystem_enabled": "Ecosystem mode: project files will be converted.",
        "log_retry": "  Retry {attempt}/{max} in {wait:.1f}s: {err}",
        "log_resumed_file": "  [RESUME] {file} (already converted)",
        "log_ecosystem_file": "  Ecosystem: {src} -> {tgt}",
    },
    "ja": {
        "title": "ユニバーサル コード マイグレーター",
        "source_lang": "変換元言語",
        "target_lang": "変換先言語",
        "input_folder": "入力フォルダ",
        "output_folder": "出力フォルダ",
        "browse": "参照...",
        "api_key": "APIキー（または環境変数 ANTHROPIC_API_KEY）",
        "model": "モデル",
        "encoding": "ソースエンコーディング",
        "extra_instructions": "追加指示（任意）",
        "run": "変換開始",
        "cancel": "キャンセル",
        "clear_log": "ログクリア",
        "folder_frame": "フォルダ選択",
        "lang_frame": "言語ペア",
        "api_frame": "API設定",
        "options_frame": "オプション",
        "log_frame": "ログ",
        "status_ready": "準備完了",
        "status_running": "実行中...",
        "status_done": "完了",
        "status_cancelled": "キャンセル済み",
        "log_start": "変換開始: {src} → {tgt}",
        "log_scanning": "ファイルをスキャン中...",
        "log_found": "{n} 件のファイルを検出。",
        "log_processing": "[{i}/{n}] 処理中: {file}",
        "log_success": "  ✓ OK → {out}",
        "log_error": "  ✗ エラー: {err}",
        "log_skip": "  - スキップ: {reason}",
        "log_complete": "変換完了。成功: {s}, エラー: {e}, スキップ: {k}",
        "log_cancel_request": "キャンセルを要求中...",
        "err_no_input": "入力フォルダを選択してください。",
        "err_no_output": "出力フォルダを選択してください。",
        "err_no_source": "変換元言語を選択してください。",
        "err_no_target": "変換先言語を選択してください。",
        "err_same_lang": "変換元と変換先は異なる言語にしてください。",
        "err_no_files": "入力フォルダに該当ファイルがありません。",
        "browse_input_title": "入力フォルダを選択",
        "browse_output_title": "出力フォルダを選択",
        "ui_lang": "表示言語",
        "auto_detect": "（自動検出）",
        "resume": "レジューム（変換済みスキップ）",
        "context": "コンテキスト注入",
        "ecosystem": "エコシステムファイル",
        "log_resume_enabled": "レジュームモード: 変換済みファイルをスキップします。",
        "log_context_enabled": "コンテキストモード: 定数/設定ファイルを先行変換します。",
        "log_ecosystem_enabled": "エコシステムモード: プロジェクトファイルも変換します。",
        "log_retry": "  リトライ {attempt}/{max} ({wait:.1f}秒後): {err}",
        "log_resumed_file": "  [レジューム] {file} (変換済み)",
        "log_ecosystem_file": "  エコシステム: {src} → {tgt}",
    },
    "zh": {
        "title": "通用代码迁移工具",
        "source_lang": "源语言",
        "target_lang": "目标语言",
        "input_folder": "输入文件夹",
        "output_folder": "输出文件夹",
        "browse": "浏览...",
        "api_key": "API密钥（或设置 ANTHROPIC_API_KEY 环境变量）",
        "model": "模型",
        "encoding": "源编码",
        "extra_instructions": "附加说明（可选）",
        "run": "开始迁移",
        "cancel": "取消",
        "clear_log": "清除日志",
        "folder_frame": "文件夹选择",
        "lang_frame": "语言对",
        "api_frame": "API设置",
        "options_frame": "选项",
        "log_frame": "日志",
        "status_ready": "就绪",
        "status_running": "运行中...",
        "status_done": "完成",
        "status_cancelled": "已取消",
        "log_start": "开始迁移: {src} → {tgt}",
        "log_scanning": "扫描文件...",
        "log_found": "找到 {n} 个文件。",
        "log_processing": "[{i}/{n}] 处理中: {file}",
        "log_success": "  ✓ 成功 → {out}",
        "log_error": "  ✗ 错误: {err}",
        "log_skip": "  - 跳过: {reason}",
        "log_complete": "迁移完成。成功: {s}, 错误: {e}, 跳过: {k}",
        "log_cancel_request": "正在取消...",
        "err_no_input": "请选择输入文件夹。",
        "err_no_output": "请选择输出文件夹。",
        "err_no_source": "请选择源语言。",
        "err_no_target": "请选择目标语言。",
        "err_same_lang": "源语言和目标语言必须不同。",
        "err_no_files": "输入文件夹中未找到匹配的文件。",
        "browse_input_title": "选择输入文件夹",
        "browse_output_title": "选择输出文件夹",
        "ui_lang": "界面语言",
        "auto_detect": "（自动检测）",
        "resume": "断点续传（跳过已转换）",
        "context": "上下文注入",
        "ecosystem": "生态文件",
        "log_resume_enabled": "断点续传模式：跳过已转换的文件。",
        "log_context_enabled": "上下文模式：优先转换配置/常量文件。",
        "log_ecosystem_enabled": "生态模式：项目文件也将被转换。",
    },
    "ko": {
        "title": "유니버설 코드 마이그레이터",
        "source_lang": "소스 언어",
        "target_lang": "대상 언어",
        "input_folder": "입력 폴더",
        "output_folder": "출력 폴더",
        "browse": "찾아보기...",
        "api_key": "API 키 (또는 ANTHROPIC_API_KEY 환경변수 설정)",
        "model": "모델",
        "encoding": "소스 인코딩",
        "extra_instructions": "추가 지침 (선택사항)",
        "run": "마이그레이션 시작",
        "cancel": "취소",
        "clear_log": "로그 지우기",
        "folder_frame": "폴더 선택",
        "lang_frame": "언어 쌍",
        "api_frame": "API 설정",
        "options_frame": "옵션",
        "log_frame": "로그",
        "status_ready": "준비",
        "status_running": "실행 중...",
        "status_done": "완료",
        "status_cancelled": "취소됨",
        "log_start": "마이그레이션 시작: {src} → {tgt}",
        "log_scanning": "파일 스캔 중...",
        "log_found": "{n}개 파일 발견.",
        "log_processing": "[{i}/{n}] 처리 중: {file}",
        "log_success": "  ✓ 성공 → {out}",
        "log_error": "  ✗ 오류: {err}",
        "log_skip": "  - 건너뜀: {reason}",
        "log_complete": "마이그레이션 완료. 성공: {s}, 오류: {e}, 건너뜀: {k}",
        "log_cancel_request": "취소 요청 중...",
        "err_no_input": "입력 폴더를 선택하세요.",
        "err_no_output": "출력 폴더를 선택하세요.",
        "err_no_source": "소스 언어를 선택하세요.",
        "err_no_target": "대상 언어를 선택하세요.",
        "err_same_lang": "소스 언어와 대상 언어가 달라야 합니다.",
        "err_no_files": "입력 폴더에 일치하는 파일이 없습니다.",
        "browse_input_title": "입력 폴더 선택",
        "browse_output_title": "출력 폴더 선택",
        "ui_lang": "UI 언어",
        "auto_detect": "(자동 감지)",
        "resume": "이어하기 (변환된 파일 건너뛰기)",
        "context": "컨텍스트 주입",
        "ecosystem": "에코시스템 파일",
        "log_resume_enabled": "이어하기 모드: 이미 변환된 파일을 건너뜁니다.",
        "log_context_enabled": "컨텍스트 모드: 설정/상수 파일을 먼저 변환합니다.",
        "log_ecosystem_enabled": "에코시스템 모드: 프로젝트 파일도 변환합니다.",
    },
    "es": {
        "title": "Migrador Universal de Código",
        "source_lang": "Idioma Origen",
        "target_lang": "Idioma Destino",
        "input_folder": "Carpeta de Entrada",
        "output_folder": "Carpeta de Salida",
        "browse": "Examinar...",
        "api_key": "Clave API (o variable ANTHROPIC_API_KEY)",
        "model": "Modelo",
        "encoding": "Codificación",
        "extra_instructions": "Instrucciones adicionales (opcional)",
        "run": "Iniciar Migración",
        "cancel": "Cancelar",
        "clear_log": "Limpiar Log",
        "folder_frame": "Selección de Carpetas",
        "lang_frame": "Par de Idiomas",
        "api_frame": "Configuración API",
        "options_frame": "Opciones",
        "log_frame": "Registro",
        "status_ready": "Listo",
        "status_running": "Ejecutando...",
        "status_done": "Completado",
        "status_cancelled": "Cancelado",
        "log_start": "Iniciando migración: {src} → {tgt}",
        "log_scanning": "Escaneando archivos...",
        "log_found": "{n} archivo(s) encontrado(s).",
        "log_processing": "[{i}/{n}] Procesando: {file}",
        "log_success": "  ✓ OK → {out}",
        "log_error": "  ✗ ERROR: {err}",
        "log_skip": "  - OMITIDO: {reason}",
        "log_complete": "Migración completa. Éxitos: {s}, Errores: {e}, Omitidos: {k}",
        "log_cancel_request": "Solicitando cancelación...",
        "err_no_input": "Seleccione una carpeta de entrada.",
        "err_no_output": "Seleccione una carpeta de salida.",
        "err_no_source": "Seleccione un idioma de origen.",
        "err_no_target": "Seleccione un idioma de destino.",
        "err_same_lang": "Los idiomas deben ser diferentes.",
        "err_no_files": "No se encontraron archivos.",
        "browse_input_title": "Seleccionar Carpeta de Entrada",
        "browse_output_title": "Seleccionar Carpeta de Salida",
        "ui_lang": "Idioma de interfaz",
        "auto_detect": "(Autodetectar)",
        "resume": "Reanudar (omitir convertidos)",
        "context": "Inyeccion de contexto",
        "ecosystem": "Archivos de ecosistema",
        "log_resume_enabled": "Modo reanudar: se omitiran archivos ya convertidos.",
        "log_context_enabled": "Modo contexto: archivos de config/constantes se convierten primero.",
        "log_ecosystem_enabled": "Modo ecosistema: archivos de proyecto tambien se convertiran.",
    },
    "fr": {
        "title": "Migrateur de Code Universel",
        "source_lang": "Langage Source",
        "target_lang": "Langage Cible",
        "input_folder": "Dossier d'Entrée",
        "output_folder": "Dossier de Sortie",
        "browse": "Parcourir...",
        "api_key": "Clé API (ou variable ANTHROPIC_API_KEY)",
        "model": "Modèle",
        "encoding": "Encodage",
        "extra_instructions": "Instructions supplémentaires (optionnel)",
        "run": "Démarrer la Migration",
        "cancel": "Annuler",
        "clear_log": "Effacer le Journal",
        "folder_frame": "Sélection de Dossiers",
        "lang_frame": "Paire de Langages",
        "api_frame": "Paramètres API",
        "options_frame": "Options",
        "log_frame": "Journal",
        "status_ready": "Prêt",
        "status_running": "En cours...",
        "status_done": "Terminé",
        "status_cancelled": "Annulé",
        "log_start": "Début de la migration : {src} → {tgt}",
        "log_scanning": "Analyse des fichiers...",
        "log_found": "{n} fichier(s) trouvé(s).",
        "log_processing": "[{i}/{n}] Traitement : {file}",
        "log_success": "  ✓ OK → {out}",
        "log_error": "  ✗ ERREUR : {err}",
        "log_skip": "  - IGNORÉ : {reason}",
        "log_complete": "Migration terminée. Succès : {s}, Erreurs : {e}, Ignorés : {k}",
        "log_cancel_request": "Annulation demandée...",
        "err_no_input": "Veuillez sélectionner un dossier d'entrée.",
        "err_no_output": "Veuillez sélectionner un dossier de sortie.",
        "err_no_source": "Veuillez sélectionner un langage source.",
        "err_no_target": "Veuillez sélectionner un langage cible.",
        "err_same_lang": "Les langages doivent être différents.",
        "err_no_files": "Aucun fichier correspondant trouvé.",
        "browse_input_title": "Sélectionner le Dossier d'Entrée",
        "browse_output_title": "Sélectionner le Dossier de Sortie",
        "ui_lang": "Langue de l'interface",
        "auto_detect": "(Détection automatique)",
        "resume": "Reprendre (ignorer convertis)",
        "context": "Injection de contexte",
        "ecosystem": "Fichiers ecosysteme",
        "log_resume_enabled": "Mode reprise : les fichiers deja convertis seront ignores.",
        "log_context_enabled": "Mode contexte : fichiers config/constantes convertis en premier.",
        "log_ecosystem_enabled": "Mode ecosysteme : fichiers de projet aussi convertis.",
    },
    "de": {
        "title": "Universeller Code-Migrator",
        "source_lang": "Quellsprache",
        "target_lang": "Zielsprache",
        "input_folder": "Eingabeordner",
        "output_folder": "Ausgabeordner",
        "browse": "Durchsuchen...",
        "api_key": "API-Schlüssel (oder ANTHROPIC_API_KEY setzen)",
        "model": "Modell",
        "encoding": "Kodierung",
        "extra_instructions": "Zusätzliche Anweisungen (optional)",
        "run": "Migration starten",
        "cancel": "Abbrechen",
        "clear_log": "Protokoll löschen",
        "folder_frame": "Ordnerauswahl",
        "lang_frame": "Sprachpaar",
        "api_frame": "API-Einstellungen",
        "options_frame": "Optionen",
        "log_frame": "Protokoll",
        "status_ready": "Bereit",
        "status_running": "Läuft...",
        "status_done": "Fertig",
        "status_cancelled": "Abgebrochen",
        "log_start": "Migration gestartet: {src} → {tgt}",
        "log_scanning": "Dateien werden gesucht...",
        "log_found": "{n} Datei(en) gefunden.",
        "log_processing": "[{i}/{n}] Verarbeitung: {file}",
        "log_success": "  ✓ OK → {out}",
        "log_error": "  ✗ FEHLER: {err}",
        "log_skip": "  - ÜBERSPRUNGEN: {reason}",
        "log_complete": "Migration abgeschlossen. Erfolg: {s}, Fehler: {e}, Übersprungen: {k}",
        "log_cancel_request": "Abbruch angefordert...",
        "err_no_input": "Bitte wählen Sie einen Eingabeordner.",
        "err_no_output": "Bitte wählen Sie einen Ausgabeordner.",
        "err_no_source": "Bitte wählen Sie eine Quellsprache.",
        "err_no_target": "Bitte wählen Sie eine Zielsprache.",
        "err_same_lang": "Quell- und Zielsprache müssen unterschiedlich sein.",
        "err_no_files": "Keine passenden Dateien gefunden.",
        "browse_input_title": "Eingabeordner auswählen",
        "browse_output_title": "Ausgabeordner auswählen",
        "ui_lang": "Oberflächensprache",
        "auto_detect": "(Automatisch erkennen)",
        "resume": "Fortsetzen (konvertierte uberspringen)",
        "context": "Kontext-Injektion",
        "ecosystem": "Okosystem-Dateien",
        "log_resume_enabled": "Fortsetzungsmodus: bereits konvertierte Dateien werden ubersprungen.",
        "log_context_enabled": "Kontextmodus: Konfig-/Konstantendateien werden zuerst konvertiert.",
        "log_ecosystem_enabled": "Okosystemmodus: Projektdateien werden auch konvertiert.",
    },
    "pt": {
        "title": "Migrador Universal de Código",
        "source_lang": "Linguagem Origem",
        "target_lang": "Linguagem Destino",
        "input_folder": "Pasta de Entrada",
        "output_folder": "Pasta de Saída",
        "browse": "Procurar...",
        "api_key": "Chave API (ou variável ANTHROPIC_API_KEY)",
        "model": "Modelo",
        "encoding": "Codificação",
        "extra_instructions": "Instruções adicionais (opcional)",
        "run": "Iniciar Migração",
        "cancel": "Cancelar",
        "clear_log": "Limpar Log",
        "folder_frame": "Seleção de Pastas",
        "lang_frame": "Par de Linguagens",
        "api_frame": "Configurações API",
        "options_frame": "Opções",
        "log_frame": "Registro",
        "status_ready": "Pronto",
        "status_running": "Executando...",
        "status_done": "Concluído",
        "status_cancelled": "Cancelado",
        "log_start": "Iniciando migração: {src} → {tgt}",
        "log_scanning": "Procurando arquivos...",
        "log_found": "{n} arquivo(s) encontrado(s).",
        "log_processing": "[{i}/{n}] Processando: {file}",
        "log_success": "  ✓ OK → {out}",
        "log_error": "  ✗ ERRO: {err}",
        "log_skip": "  - IGNORADO: {reason}",
        "log_complete": "Migração concluída. Sucesso: {s}, Erros: {e}, Ignorados: {k}",
        "log_cancel_request": "Solicitando cancelamento...",
        "err_no_input": "Selecione uma pasta de entrada.",
        "err_no_output": "Selecione uma pasta de saída.",
        "err_no_source": "Selecione uma linguagem de origem.",
        "err_no_target": "Selecione uma linguagem de destino.",
        "err_same_lang": "As linguagens devem ser diferentes.",
        "err_no_files": "Nenhum arquivo encontrado.",
        "browse_input_title": "Selecionar Pasta de Entrada",
        "browse_output_title": "Selecionar Pasta de Saída",
        "ui_lang": "Idioma da interface",
        "auto_detect": "(Detecção automática)",
        "resume": "Retomar (pular convertidos)",
        "context": "Injecao de contexto",
        "ecosystem": "Arquivos de ecossistema",
        "log_resume_enabled": "Modo retomar: arquivos ja convertidos serao ignorados.",
        "log_context_enabled": "Modo contexto: arquivos config/constantes convertidos primeiro.",
        "log_ecosystem_enabled": "Modo ecossistema: arquivos de projeto tambem serao convertidos.",
    },
}


class I18n:
    """Simple i18n lookup."""

    def __init__(self, lang: str = "en"):
        self.lang = lang

    def t(self, key: str, **kwargs) -> str:
        table = TRANSLATIONS.get(self.lang, TRANSLATIONS["en"])
        text = table.get(key, TRANSLATIONS["en"].get(key, key))
        if kwargs:
            text = text.format(**kwargs)
        return text
