use crate::config::Language;

pub struct Messages {
    language: Language,
}

impl Messages {
    pub fn new(language: Language) -> Self {
        Self { language }
    }

    pub fn initializing(&self) -> &str {
        match self.language {
            Language::English => "🚀 Initializing QuiCommit...",
            Language::Chinese => "🚀 正在初始化 QuiCommit...",
            Language::Japanese => "🚀 QuiCommitを初期化中...",
            Language::Korean => "🚀 QuiCommit 초기화 중...",
            Language::Spanish => "🚀 Inicializando QuiCommit...",
            Language::French => "🚀 Initialisation de QuiCommit...",
            Language::German => "🚀 QuiCommit wird initialisiert...",
        }
    }

    pub fn init_success(&self) -> &str {
        match self.language {
            Language::English => "✅ QuiCommit initialized successfully!",
            Language::Chinese => "✅ QuiCommit 初始化成功！",
            Language::Japanese => "✅ QuiCommitの初期化が完了しました！",
            Language::Korean => "✅ QuiCommit 초기화 성공!",
            Language::Spanish => "✅ ¡QuiCommit inicializado exitosamente!",
            Language::French => "✅ QuiCommit initialisé avec succès !",
            Language::German => "✅ QuiCommit erfolgreich initialisiert!",
        }
    }

    pub fn next_steps(&self) -> &str {
        match self.language {
            Language::English => "Next steps:",
            Language::Chinese => "下一步：",
            Language::Japanese => "次のステップ：",
            Language::Korean => "다음 단계:",
            Language::Spanish => "Próximos pasos:",
            Language::French => "Prochaines étapes :",
            Language::German => "Nächste Schritte:",
        }
    }

    pub fn config_file(&self) -> &str {
        match self.language {
            Language::English => "Config file:",
            Language::Chinese => "配置文件：",
            Language::Japanese => "設定ファイル：",
            Language::Korean => "구성 파일:",
            Language::Spanish => "Archivo de configuración:",
            Language::French => "Fichier de configuration :",
            Language::German => "Konfigurationsdatei:",
        }
    }

    pub fn setup_profile(&self) -> &str {
        match self.language {
            Language::English => "Let's set up your first profile:",
            Language::Chinese => "让我们设置你的第一个配置文件：",
            Language::Japanese => "最初のプロファイルを設定しましょう：",
            Language::Korean => "첫 번째 프로필을 설정해 보겠습니다:",
            Language::Spanish => "Configuremos tu primer perfil:",
            Language::French => "Configurons votre premier profil :",
            Language::German => "Lassen Sie uns Ihr erstes Profil einrichten:",
        }
    }

    pub fn profile_name(&self) -> &str {
        match self.language {
            Language::English => "Profile name",
            Language::Chinese => "配置文件名称",
            Language::Japanese => "プロファイル名",
            Language::Korean => "프로필 이름",
            Language::Spanish => "Nombre del perfil",
            Language::French => "Nom du profil",
            Language::German => "Profilname",
        }
    }

    pub fn git_user_name(&self) -> &str {
        match self.language {
            Language::English => "Git user name",
            Language::Chinese => "Git 用户名",
            Language::Japanese => "Gitユーザー名",
            Language::Korean => "Git 사용자 이름",
            Language::Spanish => "Nombre de usuario de Git",
            Language::French => "Nom d'utilisateur Git",
            Language::German => "Git-Benutzername",
        }
    }

    pub fn git_user_email(&self) -> &str {
        match self.language {
            Language::English => "Git user email",
            Language::Chinese => "Git 用户邮箱",
            Language::Japanese => "Gitユーザーメール",
            Language::Korean => "Git 사용자 이메일",
            Language::Spanish => "Correo de usuario de Git",
            Language::French => "E-mail utilisateur Git",
            Language::German => "Git-Benutzer-E-Mail",
        }
    }

    pub fn select_llm_provider(&self) -> &str {
        match self.language {
            Language::English => "Select your preferred LLM provider:",
            Language::Chinese => "选择你偏好的 LLM 提供商：",
            Language::Japanese => "好みのLLMプロバイダーを選択：",
            Language::Korean => "선호하는 LLM 공급자를 선택하세요:",
            Language::Spanish => "Selecciona tu proveedor LLM preferido:",
            Language::French => "Sélectionnez votre fournisseur LLM préféré :",
            Language::German => "Wählen Sie Ihren bevorzugten LLM-Anbieter:",
        }
    }

    pub fn commit_preview(&self) -> &str {
        match self.language {
            Language::English => "Commit preview:",
            Language::Chinese => "提交预览：",
            Language::Japanese => "コミットプレビュー：",
            Language::Korean => "커밋 미리보기:",
            Language::Spanish => "Vista previa del commit:",
            Language::French => "Aperçu du commit :",
            Language::German => "Commit-Vorschau:",
        }
    }

    pub fn proceed_commit(&self) -> &str {
        match self.language {
            Language::English => "Do you want to proceed with this commit?",
            Language::Chinese => "是否继续此提交？",
            Language::Japanese => "このコミットを続行しますか？",
            Language::Korean => "이 커밋을 계속하시겠습니까?",
            Language::Spanish => "¿Quieres proceder con este commit?",
            Language::French => "Voulez-vous procéder à ce commit ?",
            Language::German => "Möchten Sie mit diesem Commit fortfahren?",
        }
    }

    pub fn commit_created(&self) -> &str {
        match self.language {
            Language::English => "Created commit",
            Language::Chinese => "已创建提交",
            Language::Japanese => "コミットを作成しました",
            Language::Korean => "커밋 생성됨",
            Language::Spanish => "Commit creado",
            Language::French => "Commit créé",
            Language::German => "Commit erstellt",
        }
    }

    pub fn commit_amended(&self) -> &str {
        match self.language {
            Language::English => "Amended commit",
            Language::Chinese => "已修改提交",
            Language::Japanese => "コミットを修正しました",
            Language::Korean => "커밋 수정됨",
            Language::Spanish => "Commit enmendado",
            Language::French => "Commit modifié",
            Language::German => "Commit geändert",
        }
    }

    pub fn commit_cancelled(&self) -> &str {
        match self.language {
            Language::English => "Commit cancelled.",
            Language::Chinese => "提交已取消。",
            Language::Japanese => "コミットがキャンセルされました。",
            Language::Korean => "커밋이 취소되었습니다.",
            Language::Spanish => "Commit cancelado.",
            Language::French => "Commit annulé.",
            Language::German => "Commit abgebrochen.",
        }
    }

    pub fn tag_preview(&self) -> &str {
        match self.language {
            Language::English => "Tag preview:",
            Language::Chinese => "标签预览：",
            Language::Japanese => "タグプレビュー：",
            Language::Korean => "태그 미리보기:",
            Language::Spanish => "Vista previa de la etiqueta:",
            Language::French => "Aperçu de l'étiquette :",
            Language::German => "Tag-Vorschau:",
        }
    }

    pub fn create_tag(&self) -> &str {
        match self.language {
            Language::English => "Create this tag?",
            Language::Chinese => "创建此标签？",
            Language::Japanese => "このタグを作成しますか？",
            Language::Korean => "이 태그를 생성하시겠습니까?",
            Language::Spanish => "¿Crear esta etiqueta?",
            Language::French => "Créer cette étiquette ?",
            Language::German => "Diesen Tag erstellen?",
        }
    }

    pub fn tag_created(&self) -> &str {
        match self.language {
            Language::English => "Created tag",
            Language::Chinese => "已创建标签",
            Language::Japanese => "タグを作成しました",
            Language::Korean => "태그 생성됨",
            Language::Spanish => "Etiqueta creada",
            Language::French => "Étiquette créée",
            Language::German => "Tag erstellt",
        }
    }

    pub fn tag_cancelled(&self) -> &str {
        match self.language {
            Language::English => "Tag creation cancelled.",
            Language::Chinese => "标签创建已取消。",
            Language::Japanese => "タグ作成がキャンセルされました。",
            Language::Korean => "태그 생성이 취소되었습니다.",
            Language::Spanish => "Creación de etiqueta cancelada.",
            Language::French => "Création d'étiquette annulée.",
            Language::German => "Tag-Erstellung abgebrochen.",
        }
    }

    pub fn changelog_preview(&self) -> &str {
        match self.language {
            Language::English => "Changelog preview:",
            Language::Chinese => "变更日志预览：",
            Language::Japanese => "変更ログプレビュー：",
            Language::Korean => "변경 로그 미리보기:",
            Language::Spanish => "Vista previa del changelog:",
            Language::French => "Aperçu du changelog :",
            Language::German => "Changelog-Vorschau:",
        }
    }

    pub fn changelog_written(&self) -> &str {
        match self.language {
            Language::English => "Changelog written to",
            Language::Chinese => "变更日志已写入",
            Language::Japanese => "変更ログを書き込みました",
            Language::Korean => "변경 로그가 작성됨",
            Language::Spanish => "Changelog escrito en",
            Language::French => "Changelog écrit dans",
            Language::German => "Changelog geschrieben nach",
        }
    }

    pub fn dry_run(&self) -> &str {
        match self.language {
            Language::English => "Dry run",
            Language::Chinese => "试运行",
            Language::Japanese => "ドライラン",
            Language::Korean => "드라이 런",
            Language::Spanish => "Ejecución en seco",
            Language::French => "Exécution à blanc",
            Language::German => "Testlauf",
        }
    }

    pub fn no_changes(&self) -> &str {
        match self.language {
            Language::English => "No changes to commit. Working tree is clean.",
            Language::Chinese => "没有可提交的更改。工作树是干净的。",
            Language::Japanese => "コミットする変更がありません。作業ツリーはクリーンです。",
            Language::Korean => "커밋할 변경 사항이 없습니다. 작업 트리가 깨끗합니다.",
            Language::Spanish => {
                "No hay cambios para hacer commit. El árbol de trabajo está limpio."
            }
            Language::French => "Aucun changement à commiter. L'arbre de travail est propre.",
            Language::German => "Keine Änderungen zum Committen. Arbeitsbaum ist sauber.",
        }
    }

    pub fn staged_all(&self) -> &str {
        match self.language {
            Language::English => "Staged all changes",
            Language::Chinese => "已暂存所有更改",
            Language::Japanese => "すべての変更をステージしました",
            Language::Korean => "모든 변경 사항을 스테이징함",
            Language::Spanish => "Todos los cambios preparados",
            Language::French => "Tous les changements indexés",
            Language::German => "Alle Änderungen bereitgestellt",
        }
    }

    pub fn auto_stage_changes(&self) -> &str {
        match self.language {
            Language::English => "No files staged. Auto-staging all changes...",
            Language::Chinese => "没有暂存文件。自动暂存所有更改...",
            Language::Japanese => {
                "ステージされたファイルがありません。すべての変更を自動ステージ中..."
            }
            Language::Korean => "스테이징된 파일이 없습니다. 모든 변경 사항을 자동 스테이징 중...",
            Language::Spanish => {
                "No hay archivos preparados. Preparando automáticamente todos los cambios..."
            }
            Language::French => {
                "Aucun fichier indexé. Indexation automatique de tous les changements..."
            }
            Language::German => {
                "Keine Dateien bereitgestellt. Alle Änderungen werden automatisch bereitgestellt..."
            }
        }
    }

    pub fn push_after_commit(&self) -> &str {
        match self.language {
            Language::English => "Push changes to remote?",
            Language::Chinese => "推送更改到远程仓库？",
            Language::Japanese => "リモートに変更をプッシュしますか？",
            Language::Korean => "원격으로 변경 사항을 푸시하시겠습니까?",
            Language::Spanish => "¿Enviar cambios al remoto?",
            Language::French => "Envoyer les modifications au distant ?",
            Language::German => "Änderungen an Remote pushen?",
        }
    }

    pub fn push_after_tag(&self) -> &str {
        match self.language {
            Language::English => "Push tag to remote?",
            Language::Chinese => "推送标签到远程仓库？",
            Language::Japanese => "リモートにタグをプッシュしますか？",
            Language::Korean => "원격으로 태그를 푸시하시겠습니까?",
            Language::Spanish => "¿Enviar etiqueta al remoto?",
            Language::French => "Envoyer l'étiquette au distant ?",
            Language::German => "Tag an Remote pushen?",
        }
    }

    pub fn pushing_commit(&self, remote: &str) -> String {
        match self.language {
            Language::English => format!("→ Pushing commit to {}...", remote),
            Language::Chinese => format!("→ 正在推送提交到 {}...", remote),
            Language::Japanese => format!("→ コミットを{}にプッシュ中...", remote),
            Language::Korean => format!("→ 커밋을 {}로 푸시 중...", remote),
            Language::Spanish => format!("→ Enviando commit a {}...", remote),
            Language::French => format!("→ Envoi du commit vers {}...", remote),
            Language::German => format!("→ Commit wird an {} gepusht...", remote),
        }
    }

    pub fn pushed_commit(&self, remote: &str) -> String {
        match self.language {
            Language::English => format!("✓ Pushed commit to {}", remote),
            Language::Chinese => format!("✓ 已推送提交到 {}", remote),
            Language::Japanese => format!("✓ コミットを{}にプッシュしました", remote),
            Language::Korean => format!("✓ 커밋을 {}로 푸시함", remote),
            Language::Spanish => format!("✓ Commit enviado a {}", remote),
            Language::French => format!("✓ Commit envoyé à {}", remote),
            Language::German => format!("✓ Commit an {} gepusht", remote),
        }
    }

    pub fn ai_analyzing(&self) -> &str {
        match self.language {
            Language::English => "🤖 AI is analyzing your changes...",
            Language::Chinese => "🤖 AI 正在分析你的更改...",
            Language::Japanese => "🤖 AIが変更を分析しています...",
            Language::Korean => "🤖 AI가 변경 사항을 분석 중...",
            Language::Spanish => "🤖 La IA está analizando tus cambios...",
            Language::French => "🤖 L'IA analyse vos modifications...",
            Language::German => "🤖 KI analysiert Ihre Änderungen...",
        }
    }

    pub fn ai_generating_tag(&self, count: usize) -> String {
        match self.language {
            Language::English => {
                format!("🤖 AI is generating tag message from {} commits...", count)
            }
            Language::Chinese => format!("🤖 AI 正在从 {} 个提交生成标签消息...", count),
            Language::Japanese => format!(
                "🤖 AIが{}個のコミットからタグメッセージを生成しています...",
                count
            ),
            Language::Korean => format!("🤖 AI가 {}개의 커밋에서 태그 메시지를 생성 중...", count),
            Language::Spanish => format!(
                "🤖 La IA está generando mensaje de etiqueta desde {} commits...",
                count
            ),
            Language::French => format!(
                "🤖 L'IA génère le message d'étiquette à partir de {} commits...",
                count
            ),
            Language::German => format!("🤖 KI generiert Tag-Nachricht aus {} Commits...", count),
        }
    }

    pub fn ai_generating_changelog(&self) -> &str {
        match self.language {
            Language::English => "🤖 AI is generating changelog...",
            Language::Chinese => "🤖 AI 正在生成变更日志...",
            Language::Japanese => "🤖 AIが変更ログを生成しています...",
            Language::Korean => "🤖 AI가 변경 로그를 생성 중...",
            Language::Spanish => "🤖 La IA está generando el changelog...",
            Language::French => "🤖 L'IA génère le changelog...",
            Language::German => "🤖 KI generiert Changelog...",
        }
    }

    pub fn fetching_commits(&self) -> &str {
        match self.language {
            Language::English => "→ Fetching commits...",
            Language::Chinese => "→ 正在获取提交...",
            Language::Japanese => "→ コミットを取得中...",
            Language::Korean => "→ 커밋 가져오는 중...",
            Language::Spanish => "→ Obteniendo commits...",
            Language::French => "→ Récupération des commits...",
            Language::German => "→ Commits werden abgerufen...",
        }
    }

    pub fn found_commits(&self, count: usize) -> String {
        match self.language {
            Language::English => format!("✓ Found {} commits", count),
            Language::Chinese => format!("✓ 找到 {} 个提交", count),
            Language::Japanese => format!("✓ {}個のコミットが見つかりました", count),
            Language::Korean => format!("✓ {}개의 커밋을 찾음", count),
            Language::Spanish => format!("✓ Se encontraron {} commits", count),
            Language::French => format!("✓ {} commits trouvés", count),
            Language::German => format!("✓ {} Commits gefunden", count),
        }
    }

    pub fn version_selection(&self) -> &str {
        match self.language {
            Language::English => "Version selection:",
            Language::Chinese => "版本选择：",
            Language::Japanese => "バージョン選択：",
            Language::Korean => "버전 선택:",
            Language::Spanish => "Selección de versión:",
            Language::French => "Sélection de version :",
            Language::German => "Versionsauswahl:",
        }
    }

    pub fn latest_version(&self) -> &str {
        match self.language {
            Language::English => "Latest version:",
            Language::Chinese => "最新版本：",
            Language::Japanese => "最新バージョン：",
            Language::Korean => "최신 버전:",
            Language::Spanish => "Última versión:",
            Language::French => "Dernière version :",
            Language::German => "Neueste Version:",
        }
    }

    pub fn no_existing_version_tags(&self) -> &str {
        match self.language {
            Language::English => "No existing version tags found",
            Language::Chinese => "未找到现有的版本标签",
            Language::Japanese => "既存のバージョンタグが見つかりません",
            Language::Korean => "기존 버전 태그를 찾을 수 없음",
            Language::Spanish => "No se encontraron etiquetas de versión existentes",
            Language::French => "Aucune étiquette de version existante trouvée",
            Language::German => "Keine vorhandenen Versionstags gefunden",
        }
    }

    pub fn suggested_bump(&self) -> &str {
        match self.language {
            Language::English => "Suggested bump:",
            Language::Chinese => "建议的版本升级：",
            Language::Japanese => "提案されたバンプ：",
            Language::Korean => "제안된 버전 증가:",
            Language::Spanish => "Incremento sugerido:",
            Language::French => "Bump suggéré :",
            Language::German => "Vorgeschlagener Bump:",
        }
    }

    pub fn use_this_version(&self) -> &str {
        match self.language {
            Language::English => "Use this version?",
            Language::Chinese => "使用此版本？",
            Language::Japanese => "このバージョンを使用しますか？",
            Language::Korean => "이 버전을 사용하시겠습니까?",
            Language::Spanish => "¿Usar esta versión?",
            Language::French => "Utiliser cette version ?",
            Language::German => "Diese Version verwenden?",
        }
    }

    pub fn pushing_tag(&self, remote: &str) -> String {
        match self.language {
            Language::English => format!("→ Pushing tag to {}...", remote),
            Language::Chinese => format!("→ 正在推送标签到 {}...", remote),
            Language::Japanese => format!("→ タグを{}にプッシュ中...", remote),
            Language::Korean => format!("→ 태그를 {}로 푸시 중...", remote),
            Language::Spanish => format!("→ Enviando etiqueta a {}...", remote),
            Language::French => format!("→ Envoi de l'étiquette vers {}...", remote),
            Language::German => format!("→ Tag wird an {} gepusht...", remote),
        }
    }

    pub fn pushed_tag(&self, remote: &str) -> String {
        match self.language {
            Language::English => format!("✓ Pushed tag to {}", remote),
            Language::Chinese => format!("✓ 已推送标签到 {}", remote),
            Language::Japanese => format!("✓ タグを{}にプッシュしました", remote),
            Language::Korean => format!("✓ 태그를 {}로 푸시함", remote),
            Language::Spanish => format!("✓ Etiqueta enviada a {}", remote),
            Language::French => format!("✓ Étiquette envoyée à {}", remote),
            Language::German => format!("✓ Tag an {} gepusht", remote),
        }
    }

    pub fn cancelled(&self) -> &str {
        match self.language {
            Language::English => "Cancelled.",
            Language::Chinese => "已取消。",
            Language::Japanese => "キャンセルされました。",
            Language::Korean => "취소됨.",
            Language::Spanish => "Cancelado.",
            Language::French => "Annulé.",
            Language::German => "Abgebrochen.",
        }
    }

    pub fn select_commit_type(&self) -> &str {
        match self.language {
            Language::English => "Select commit type",
            Language::Chinese => "选择提交类型",
            Language::Japanese => "コミットタイプを選択",
            Language::Korean => "커밋 유형 선택",
            Language::Spanish => "Seleccionar tipo de commit",
            Language::French => "Sélectionner le type de commit",
            Language::German => "Commit-Typ auswählen",
        }
    }

    pub fn scope_optional(&self) -> &str {
        match self.language {
            Language::English => "Scope (optional, press Enter to skip)",
            Language::Chinese => "范围（可选，按 Enter 跳过）",
            Language::Japanese => "スコープ（オプション、Enterでスキップ）",
            Language::Korean => "범위(선택 사항, Enter로 건너뜀)",
            Language::Spanish => "Ámbito (opcional, presiona Enter para omitir)",
            Language::French => "Portée (optionnel, appuyez sur Entrée pour ignorer)",
            Language::German => "Bereich (optional, Enter zum Überspringen)",
        }
    }

    pub fn description(&self) -> &str {
        match self.language {
            Language::English => "Description",
            Language::Chinese => "描述",
            Language::Japanese => "説明",
            Language::Korean => "설명",
            Language::Spanish => "Descripción",
            Language::French => "Description",
            Language::German => "Beschreibung",
        }
    }

    pub fn breaking_change(&self) -> &str {
        match self.language {
            Language::English => "Is this a breaking change?",
            Language::Chinese => "这是破坏性更改吗？",
            Language::Japanese => "これは破壊的変更ですか？",
            Language::Korean => "이것은 주요 변경 사항입니까?",
            Language::Spanish => "¿Es este un cambio rupturista?",
            Language::French => "Est-ce un changement cassant ?",
            Language::German => "Ist dies ein Breaking Change?",
        }
    }

    pub fn add_body(&self) -> &str {
        match self.language {
            Language::English => "Add body to commit?",
            Language::Chinese => "添加提交正文？",
            Language::Japanese => "コミットに本文を追加しますか？",
            Language::Korean => "커밋에 본문을 추가하시겠습니까?",
            Language::Spanish => "¿Añadir cuerpo al commit?",
            Language::French => "Ajouter un corps au commit ?",
            Language::German => "Body zum Commit hinzufügen?",
        }
    }

    pub fn enter_commit_body(&self) -> &str {
        match self.language {
            Language::English => "Enter commit body...",
            Language::Chinese => "输入提交正文...",
            Language::Japanese => "コミット本文を入力...",
            Language::Korean => "커밋 본문 입력...",
            Language::Spanish => "Introduce el cuerpo del commit...",
            Language::French => "Saisissez le corps du commit...",
            Language::German => "Commit-Body eingeben...",
        }
    }

    pub fn open_editor(&self) -> &str {
        match self.language {
            Language::English => "Open editor for tag message?",
            Language::Chinese => "打开编辑器编辑标签消息？",
            Language::Japanese => "タグメッセージ用にエディタを開きますか？",
            Language::Korean => "태그 메시지를 위해 편집기를 여시겠습니까?",
            Language::Spanish => "¿Abrir editor para mensaje de etiqueta?",
            Language::French => "Ouvrir l'éditeur pour le message d'étiquette ?",
            Language::German => "Editor für Tag-Nachricht öffnen?",
        }
    }

    pub fn tag_message(&self) -> &str {
        match self.language {
            Language::English => "Tag message",
            Language::Chinese => "标签消息",
            Language::Japanese => "タグメッセージ",
            Language::Korean => "태그 메시지",
            Language::Spanish => "Mensaje de etiqueta",
            Language::French => "Message d'étiquette",
            Language::German => "Tag-Nachricht",
        }
    }

    pub fn version(&self) -> &str {
        match self.language {
            Language::English => "Version",
            Language::Chinese => "版本",
            Language::Japanese => "バージョン",
            Language::Korean => "버전",
            Language::Spanish => "Versión",
            Language::French => "Version",
            Language::German => "Version",
        }
    }

    pub fn unreleased(&self) -> &str {
        match self.language {
            Language::English => "Unreleased",
            Language::Chinese => "未发布",
            Language::Japanese => "未リリース",
            Language::Korean => "릴리스되지 않음",
            Language::Spanish => "Sin lanzar",
            Language::French => "Non publié",
            Language::German => "Unveröffentlicht",
        }
    }

    pub fn no_commits_found(&self) -> &str {
        match self.language {
            Language::English => "No commits found in the specified range",
            Language::Chinese => "在指定范围内未找到提交",
            Language::Japanese => "指定された範囲でコミットが見つかりませんでした",
            Language::Korean => "지정된 범위에서 커밋을 찾을 수 없음",
            Language::Spanish => "No se encontraron commits en el rango especificado",
            Language::French => "Aucun commit trouvé dans la plage spécifiée",
            Language::German => "Keine Commits im angegebenen Bereich gefunden",
        }
    }

    pub fn write_to_file(&self, path: &str) -> String {
        match self.language {
            Language::English => format!("Write to {:?}?", path),
            Language::Chinese => format!("写入 {:?}？", path),
            Language::Japanese => format!("{:?} に書き込みますか？", path),
            Language::Korean => format!("{:?}에 쓰시겠습니까?", path),
            Language::Spanish => format!("¿Escribir en {:?}?", path),
            Language::French => format!("Écrire dans {:?} ?", path),
            Language::German => format!("In {:?} schreiben?", path),
        }
    }

    pub fn initialized_changelog(&self, path: &str) -> String {
        match self.language {
            Language::English => format!("✓ Initialized changelog at {:?}", path),
            Language::Chinese => format!("✓ 已在 {:?} 初始化变更日志", path),
            Language::Japanese => format!("✓ {:?}で変更ログを初期化しました", path),
            Language::Korean => format!("✓ {:?}에서 변경 로그 초기화됨", path),
            Language::Spanish => format!("✓ Changelog inicializado en {:?}", path),
            Language::French => format!("✓ Changelog initialisé à {:?}", path),
            Language::German => format!("✓ Changelog bei {:?} initialisiert", path),
        }
    }

    pub fn staged_files(&self, count: usize) -> String {
        match self.language {
            Language::English => format!("Staged files ({}):", count),
            Language::Chinese => format!("已暂存文件（{}）：", count),
            Language::Japanese => format!("ステージされたファイル（{}）：", count),
            Language::Korean => format!("스테이징된 파일({}):", count),
            Language::Spanish => format!("Archivos preparados ({}):", count),
            Language::French => format!("Fichiers indexés ({}):", count),
            Language::German => format!("Bereitgestellte Dateien ({}):", count),
        }
    }

    pub fn generating_commit_message(&self) -> &str {
        match self.language {
            Language::English => "Generating commit message...",
            Language::Chinese => "正在生成提交消息...",
            Language::Japanese => "コミットメッセージを生成中...",
            Language::Korean => "커밋 메시지 생성 중...",
            Language::Spanish => "Generando mensaje de commit...",
            Language::French => "Génération du message de commit...",
            Language::German => "Commit-Nachricht wird generiert...",
        }
    }

    pub fn generated_commit_message(&self) -> &str {
        match self.language {
            Language::English => "Generated commit message:",
            Language::Chinese => "生成的提交消息：",
            Language::Japanese => "生成されたコミットメッセージ：",
            Language::Korean => "생성된 커밋 메시지:",
            Language::Spanish => "Mensaje de commit generado:",
            Language::French => "Message de commit généré :",
            Language::German => "Generierte Commit-Nachricht:",
        }
    }

    pub fn what_would_you_like_to_do(&self) -> &str {
        match self.language {
            Language::English => "What would you like to do?",
            Language::Chinese => "你想做什么？",
            Language::Japanese => "何をしますか？",
            Language::Korean => "무엇을 하시겠습니까?",
            Language::Spanish => "¿Qué te gustaría hacer?",
            Language::French => "Que souhaitez-vous faire ?",
            Language::German => "Was möchten Sie tun?",
        }
    }

    pub fn accept_and_commit(&self) -> &str {
        match self.language {
            Language::English => "✓ Accept and commit",
            Language::Chinese => "✓ 接受并提交",
            Language::Japanese => "✓ 受け入れてコミット",
            Language::Korean => "✓ 수락하고 커밋",
            Language::Spanish => "✓ Aceptar y hacer commit",
            Language::French => "✓ Accepter et commiter",
            Language::German => "✓ Akzeptieren und committen",
        }
    }

    pub fn regenerate(&self) -> &str {
        match self.language {
            Language::English => "🔄 Regenerate",
            Language::Chinese => "🔄 重新生成",
            Language::Japanese => "🔄 再生成",
            Language::Korean => "🔄 재생성",
            Language::Spanish => "🔄 Regenerar",
            Language::French => "🔄 Régénérer",
            Language::German => "🔄 Neu generieren",
        }
    }

    pub fn edit(&self) -> &str {
        match self.language {
            Language::English => "✏️  Edit",
            Language::Chinese => "✏️  编辑",
            Language::Japanese => "✏️  編集",
            Language::Korean => "✏️  편집",
            Language::Spanish => "✏️  Editar",
            Language::French => "✏️  Modifier",
            Language::German => "✏️  Bearbeiten",
        }
    }

    pub fn copy_to_clipboard(&self) -> &str {
        match self.language {
            Language::English => "📋 Copy to clipboard",
            Language::Chinese => "📋 复制到剪贴板",
            Language::Japanese => "📋 クリップボードにコピー",
            Language::Korean => "📋 클립보드에 복사",
            Language::Spanish => "📋 Copiar al portapapeles",
            Language::French => "📋 Copier dans le presse-papiers",
            Language::German => "📋 In die Zwischenablage kopieren",
        }
    }

    pub fn cancel(&self) -> &str {
        match self.language {
            Language::English => "❌ Cancel",
            Language::Chinese => "❌ 取消",
            Language::Japanese => "❌ キャンセル",
            Language::Korean => "❌ 취소",
            Language::Spanish => "❌ Cancelar",
            Language::French => "❌ Annuler",
            Language::German => "❌ Abbrechen",
        }
    }

    pub fn regenerating(&self) -> &str {
        match self.language {
            Language::English => "Regenerating...",
            Language::Chinese => "正在重新生成...",
            Language::Japanese => "再生成中...",
            Language::Korean => "재생성 중...",
            Language::Spanish => "Regenerando...",
            Language::French => "Régénération...",
            Language::German => "Neu generieren...",
        }
    }

    pub fn copied_to_clipboard(&self) -> &str {
        match self.language {
            Language::English => "Copied to clipboard!",
            Language::Chinese => "已复制到剪贴板！",
            Language::Japanese => "クリップボードにコピーしました！",
            Language::Korean => "클립보드에 복사됨!",
            Language::Spanish => "¡Copiado al portapapeles!",
            Language::French => "Copié dans le presse-papiers !",
            Language::German => "In die Zwischenablage kopiert!",
        }
    }

    pub fn cancelled_by_user(&self) -> &str {
        match self.language {
            Language::English => "Cancelled by user",
            Language::Chinese => "用户已取消",
            Language::Japanese => "ユーザーによってキャンセルされました",
            Language::Korean => "사용자가 취소함",
            Language::Spanish => "Cancelado por el usuario",
            Language::French => "Annulé par l'utilisateur",
            Language::German => "Vom Benutzer abgebrochen",
        }
    }

    pub fn select_option(&self) -> &str {
        match self.language {
            Language::English => "Select option",
            Language::Chinese => "选择选项",
            Language::Japanese => "オプションを選択",
            Language::Korean => "옵션 선택",
            Language::Spanish => "Seleccionar opción",
            Language::French => "Sélectionner une option",
            Language::German => "Option auswählen",
        }
    }

    pub fn auto_detect_bump(&self) -> &str {
        match self.language {
            Language::English => "Auto-detect bump from commits",
            Language::Chinese => "从提交自动检测版本升级",
            Language::Japanese => "コミットからバンプを自動検出",
            Language::Korean => "커밋에서 버전 증가 자동 감지",
            Language::Spanish => "Detectar incremento automáticamente desde commits",
            Language::French => "Détecter automatiquement le bump depuis les commits",
            Language::German => "Bump automatisch aus Commits erkennen",
        }
    }

    pub fn bump_major_version(&self) -> &str {
        match self.language {
            Language::English => "Bump major version",
            Language::Chinese => "升级主版本",
            Language::Japanese => "メジャーバージョンを上げる",
            Language::Korean => "메이저 버전 증가",
            Language::Spanish => "Incrementar versión mayor",
            Language::French => "Incrémenter version majeure",
            Language::German => "Major-Version erhöhen",
        }
    }

    pub fn bump_minor_version(&self) -> &str {
        match self.language {
            Language::English => "Bump minor version",
            Language::Chinese => "升级次版本",
            Language::Japanese => "マイナーバージョンを上げる",
            Language::Korean => "마이너 버전 증가",
            Language::Spanish => "Incrementar versión menor",
            Language::French => "Incrémenter version mineure",
            Language::German => "Minor-Version erhöhen",
        }
    }

    pub fn bump_patch_version(&self) -> &str {
        match self.language {
            Language::English => "Bump patch version",
            Language::Chinese => "升级补丁版本",
            Language::Japanese => "パッチバージョンを上げる",
            Language::Korean => "패치 버전 증가",
            Language::Spanish => "Incrementar versión de parche",
            Language::French => "Incrémenter version de correctif",
            Language::German => "Patch-Version erhöhen",
        }
    }

    pub fn enter_custom_version(&self) -> &str {
        match self.language {
            Language::English => "Enter custom version",
            Language::Chinese => "输入自定义版本",
            Language::Japanese => "カスタムバージョンを入力",
            Language::Korean => "사용자 지정 버전 입력",
            Language::Spanish => "Ingresar versión personalizada",
            Language::French => "Saisir une version personnalisée",
            Language::German => "Benutzerdefinierte Version eingeben",
        }
    }

    pub fn enter_custom_tag_name(&self) -> &str {
        match self.language {
            Language::English => "Enter custom tag name",
            Language::Chinese => "输入自定义标签名称",
            Language::Japanese => "カスタムタグ名を入力",
            Language::Korean => "사용자 지정 태그 이름 입력",
            Language::Spanish => "Ingresar nombre de etiqueta personalizado",
            Language::French => "Saisir un nom d'étiquette personnalisé",
            Language::German => "Benutzerdefinierten Tag-Namen eingeben",
        }
    }

    pub fn enter_version(&self) -> &str {
        match self.language {
            Language::English => "Enter version (e.g., 1.2.3)",
            Language::Chinese => "输入版本（例如：1.2.3）",
            Language::Japanese => "バージョンを入力（例：1.2.3）",
            Language::Korean => "버전 입력(예: 1.2.3)",
            Language::Spanish => "Ingresar versión (ej: 1.2.3)",
            Language::French => "Saisir la version (ex: 1.2.3)",
            Language::German => "Version eingeben (z.B. 1.2.3)",
        }
    }

    pub fn enter_tag_name(&self) -> &str {
        match self.language {
            Language::English => "Enter tag name",
            Language::Chinese => "输入标签名称",
            Language::Japanese => "タグ名を入力",
            Language::Korean => "태그 이름 입력",
            Language::Spanish => "Ingresar nombre de etiqueta",
            Language::French => "Saisir le nom de l'étiquette",
            Language::German => "Tag-Namen eingeben",
        }
    }

    pub fn profile_description(&self) -> &str {
        match self.language {
            Language::English => "Profile description (optional)",
            Language::Chinese => "配置文件描述（可选）",
            Language::Japanese => "プロファイルの説明（オプション）",
            Language::Korean => "프로필 설명(선택 사항)",
            Language::Spanish => "Descripción del perfil (opcional)",
            Language::French => "Description du profil (optionnel)",
            Language::German => "Profilbeschreibung (optional)",
        }
    }

    pub fn is_work_profile(&self) -> &str {
        match self.language {
            Language::English => "Is this a work profile?",
            Language::Chinese => "这是工作配置文件吗？",
            Language::Japanese => "これはワークプロファイルですか？",
            Language::Korean => "이것은 작업 프로필입니까?",
            Language::Spanish => "¿Es este un perfil de trabajo?",
            Language::French => "Est-ce un profil de travail ?",
            Language::German => "Ist dies ein Arbeitsprofil?",
        }
    }

    pub fn organization_name(&self) -> &str {
        match self.language {
            Language::English => "Organization/Company name",
            Language::Chinese => "组织/公司名称",
            Language::Japanese => "組織/会社名",
            Language::Korean => "조직/회사 이름",
            Language::Spanish => "Nombre de organización/empresa",
            Language::French => "Nom de l'organisation/entreprise",
            Language::German => "Organisations-/Unternehmensname",
        }
    }

    pub fn configure_ssh(&self) -> &str {
        match self.language {
            Language::English => "Configure SSH key?",
            Language::Chinese => "配置 SSH 密钥？",
            Language::Japanese => "SSHキーを設定しますか？",
            Language::Korean => "SSH 키를 구성하시겠습니까?",
            Language::Spanish => "¿Configurar clave SSH?",
            Language::French => "Configurer la clé SSH ?",
            Language::German => "SSH-Schlüssel konfigurieren?",
        }
    }

    pub fn configure_gpg(&self) -> &str {
        match self.language {
            Language::English => "Configure GPG signing?",
            Language::Chinese => "配置 GPG 签名？",
            Language::Japanese => "GPG署名を設定しますか？",
            Language::Korean => "GPG 서명을 구성하시겠습니까?",
            Language::Spanish => "¿Configurar firma GPG?",
            Language::French => "Configurer la signature GPG ?",
            Language::German => "GPG-Signatur konfigurieren?",
        }
    }

    pub fn ssh_private_key_path(&self) -> &str {
        match self.language {
            Language::English => "SSH private key path",
            Language::Chinese => "SSH 私钥路径",
            Language::Japanese => "SSH秘密鍵パス",
            Language::Korean => "SSH 개인 키 경로",
            Language::Spanish => "Ruta de clave privada SSH",
            Language::French => "Chemin de la clé privée SSH",
            Language::German => "Pfad zum privaten SSH-Schlüssel",
        }
    }

    pub fn has_passphrase(&self) -> &str {
        match self.language {
            Language::English => "Does this key have a passphrase?",
            Language::Chinese => "此密钥有密码吗？",
            Language::Japanese => "この鍵にパスフレーズがありますか？",
            Language::Korean => "이 키에 암호가 있습니까?",
            Language::Spanish => "¿Esta clave tiene frase de paso?",
            Language::French => "Cette clé a-t-elle une phrase de passe ?",
            Language::German => "Hat dieser Schlüssel eine Passphrase?",
        }
    }

    pub fn ssh_key_passphrase(&self) -> &str {
        match self.language {
            Language::English => "SSH key passphrase",
            Language::Chinese => "SSH 密钥密码",
            Language::Japanese => "SSHキーパスフレーズ",
            Language::Korean => "SSH 키 암호",
            Language::Spanish => "Frase de paso de clave SSH",
            Language::French => "Phrase de passe de clé SSH",
            Language::German => "SSH-Schlüssel-Passphrase",
        }
    }

    pub fn gpg_key_id(&self) -> &str {
        match self.language {
            Language::English => "GPG key ID",
            Language::Chinese => "GPG 密钥 ID",
            Language::Japanese => "GPGキーID",
            Language::Korean => "GPG 키 ID",
            Language::Spanish => "ID de clave GPG",
            Language::French => "ID de clé GPG",
            Language::German => "GPG-Schlüssel-ID",
        }
    }

    pub fn use_gpg_agent(&self) -> &str {
        match self.language {
            Language::English => "Use GPG agent?",
            Language::Chinese => "使用 GPG 代理？",
            Language::Japanese => "GPGエージェントを使用しますか？",
            Language::Korean => "GPG 에이전트를 사용하시겠습니까?",
            Language::Spanish => "¿Usar agente GPG?",
            Language::French => "Utiliser l'agent GPG ?",
            Language::German => "GPG-Agent verwenden?",
        }
    }

    pub fn openai_api_key(&self) -> &str {
        match self.language {
            Language::English => "OpenAI API key",
            Language::Chinese => "OpenAI API 密钥",
            Language::Japanese => "OpenAI APIキー",
            Language::Korean => "OpenAI API 키",
            Language::Spanish => "Clave API de OpenAI",
            Language::French => "Clé API OpenAI",
            Language::German => "OpenAI-API-Schlüssel",
        }
    }

    pub fn anthropic_api_key(&self) -> &str {
        match self.language {
            Language::English => "Anthropic API key",
            Language::Chinese => "Anthropic API 密钥",
            Language::Japanese => "Anthropic APIキー",
            Language::Korean => "Anthropic API 키",
            Language::Spanish => "Clave API de Anthropic",
            Language::French => "Clé API Anthropic",
            Language::German => "Anthropic-API-Schlüssel",
        }
    }

    pub fn kimi_api_key(&self) -> &str {
        match self.language {
            Language::English => "Kimi API key",
            Language::Chinese => "Kimi API 密钥",
            Language::Japanese => "Kimi APIキー",
            Language::Korean => "Kimi API 키",
            Language::Spanish => "Clave API de Kimi",
            Language::French => "Clé API Kimi",
            Language::German => "Kimi-API-Schlüssel",
        }
    }

    pub fn deepseek_api_key(&self) -> &str {
        match self.language {
            Language::English => "DeepSeek API key",
            Language::Chinese => "DeepSeek API 密钥",
            Language::Japanese => "DeepSeek APIキー",
            Language::Korean => "DeepSeek API 키",
            Language::Spanish => "Clave API de DeepSeek",
            Language::French => "Clé API DeepSeek",
            Language::German => "DeepSeek-API-Schlüssel",
        }
    }

    pub fn openrouter_api_key(&self) -> &str {
        match self.language {
            Language::English => "OpenRouter API key",
            Language::Chinese => "OpenRouter API 密钥",
            Language::Japanese => "OpenRouter APIキー",
            Language::Korean => "OpenRouter API 키",
            Language::Spanish => "Clave API de OpenRouter",
            Language::French => "Clé API OpenRouter",
            Language::German => "OpenRouter-API-Schlüssel",
        }
    }

    pub fn model(&self) -> &str {
        match self.language {
            Language::English => "Model",
            Language::Chinese => "模型",
            Language::Japanese => "モデル",
            Language::Korean => "모델",
            Language::Spanish => "Modelo",
            Language::French => "Modèle",
            Language::German => "Modell",
        }
    }

    pub fn base_url(&self) -> &str {
        match self.language {
            Language::English => "Base URL (optional)",
            Language::Chinese => "基础 URL（可选）",
            Language::Japanese => "ベースURL（オプション）",
            Language::Korean => "기본 URL(선택 사항)",
            Language::Spanish => "URL base (opcional)",
            Language::French => "URL de base (optionnel)",
            Language::German => "Basis-URL (optional)",
        }
    }

    pub fn configuration_updated(&self) -> &str {
        match self.language {
            Language::English => "✓ Configuration updated",
            Language::Chinese => "✓ 配置已更新",
            Language::Japanese => "✓ 設定を更新しました",
            Language::Korean => "✓ 구성이 업데이트됨",
            Language::Spanish => "✓ Configuración actualizada",
            Language::French => "✓ Configuration mise à jour",
            Language::German => "✓ Konfiguration aktualisiert",
        }
    }

    pub fn set_value(&self, key: &str, value: &str) -> String {
        match self.language {
            Language::English => format!("✓ Set {} = {}", key, value),
            Language::Chinese => format!("✓ 设置 {} = {}", key, value),
            Language::Japanese => format!("✓ {} = {} を設定", key, value),
            Language::Korean => format!("✓ {} = {} 설정됨", key, value),
            Language::Spanish => format!("✓ Establecer {} = {}", key, value),
            Language::French => format!("✓ Définir {} = {}", key, value),
            Language::German => format!("✓ {} = {} festlegen", key, value),
        }
    }

    pub fn select_output_language(&self) -> &str {
        match self.language {
            Language::English => "Select output language:",
            Language::Chinese => "选择输出语言：",
            Language::Japanese => "出力言語を選択：",
            Language::Korean => "출력 언어 선택:",
            Language::Spanish => "Seleccionar idioma de salida:",
            Language::French => "Sélectionner la langue de sortie :",
            Language::German => "Ausgabesprache auswählen:",
        }
    }
}
