import type { Locale, TranslationTree } from '../i18n';

/**
 * OutboundPage (scenario H) translations.
 * Covers: breadcrumb, hero, stats, TLS toggle, trusted endpoint whitelist.
 */
export const outboundTranslations: Record<Locale, TranslationTree> = {
  en: {
    breadcrumb1: 'Security Protection',
    breadcrumb2: 'Data & Component Trust',
    breadcrumb3: 'Outbound Governance',
    eyebrow: 'Agent Outbound Mutual Authentication',
    title: 'Outbound Governance',
    subtitle: 'Agent outbound call (Agent↔Agent / Skill / Markdown URL / MCP / External LLM) whitelist + client certificate + network-level fallback triple defense.',
    stat1Label: 'Whitelist Entries',
    stat1Sub: 'secplane_outbound_trusted table',
    stat2Label: 'Recent Alerts',
    stat2Sub: 'requireHttps · exfiltrationGuard · outboundTrust',
    stat3Label: 'Managed Instances',
    stat3Sub: '{count} running',
    stat4Label: 'Dispatch Channel',
    stat4Sub: 'hot-reload via mtime',
    tls: {
      eyebrow: 'Application Layer Enforcement',
      title: 'Outbound TLS (require-https)',
      mode: 'Mode',
      enforce: 'Enforce',
      observe: 'Monitor',
      off: 'Off',
      saveApply: 'Save & Apply',
      desc: 'In the ClawAegisEx before_tool_call hook, scan all URLs in tool parameters: once http://, ws://, ftp:// or other plaintext protocols are detected → enforce blocks + alerts, observe only alerts, off skips. Covers MCP / External LLM / Skill outbound / curl|wget etc. Recommended to use with L3 K8s NetworkPolicy fallback.',
      recentHits: 'Recent Hits',
      recentHitsSub: 'enforce/observe cumulative',
    },
    trust: {
      eyebrow: 'Certificate Pool · Outbound Trusted Endpoint Whitelist',
      title: 'Only allow whitelisted domains for outbound (optional cert pin)',
      mode: 'Mode',
      enforce: 'Enforce',
      observe: 'Monitor',
      off: 'Off',
      saveApply: 'Save & Apply',
      recentBlocks: 'Recent Blocks {count}',
      placeholderDomain: 'Domain (e.g. api.openai.com or *.openai.com)',
      placeholderFingerprint: 'Optional cert SHA256 fingerprint (64 hex) — leave empty for domain only',
      probeFingerprint: '🔍 Probe Fingerprint',
      probing: 'Probing…',
      placeholderLabel: 'Note (optional)',
      add: '+ Add',
      colStatus: 'Status',
      colDomain: 'Domain / Pattern',
      colFingerprint: 'SHA256 Fingerprint',
      colLabel: 'Note',
      colAddedAt: 'Added',
      loading: 'Loading…',
      emptyList: 'Whitelist is empty. Current mode={mode}:',
      emptyEnforceWarning: ' Since the list is empty, enforce mode will block all https outbound (suggest adding entries before switching to enforce)',
      emptyAddPrompt: ' Add your trusted peer domains, then click "Save & Apply" to dispatch to pods',
      onlyDomain: 'Domain only (no pinning)',
      reprobe: 'Re-probe',
      delete: 'Delete',
      confirmDelete: 'Confirm deleting entry #{id}?',
      behavior: 'Behavior',
      behaviorDesc: 'ClawAegisEx scans https/wss URLs in tool parameters via the before_tool_call hook. Host not in list → blocked; observe only alerts. Supports wildcard domains like *.openai.com. After changes, click "Save & Apply", pods hot-reload within 1 second.',
      certPhase2a: 'Certificate Fingerprint (Phase 2a)',
      certPhase2aDesc: 'When adding entries, click "Probe Fingerprint" to TLS handshake and capture the leaf cert SHA256. Backend auto-reprobes all pinned entries hourly; when fingerprint drift is detected, an alert is written and the baseline is refreshed (wildcard entries are excluded).',
    },
    probe: {
      wildcardError: 'Wildcard domains (containing * or ?) cannot be probed, please use a specific subdomain',
      successSubject: 'subject={subject}, issuer={issuer}, expires={expires}',
      failError: 'Probe failed: {error}',
      driftAlert: '⚠️ Fingerprint drift recorded\nDomain: {domain}\nOld: {old}…\nNew: {new}…\n(Baseline updated; check alert panel for "outbound trusted endpoint fingerprint drift" event)',
      matchOk: '✓ {domain} fingerprint matches (subject={subject})',
      reprobeFail: 'Re-probe failed: {error}',
    },
    error: {
      loadFail: 'Load failed',
      saveFail: 'Save failed',
      deleteFail: 'Delete failed',
      unknownError: 'Unknown error',
    },
  },

  zh: {
    breadcrumb1: '安全防护',
    breadcrumb2: '数据与组件可信',
    breadcrumb3: '出站治理',
    eyebrow: '智能体出站双向认证',
    title: '出站治理',
    subtitle: '智能体出站调用（Agent↔Agent / Skill / Markdown URL / MCP / 外部 LLM）的白名单 + 客户端证书 + 网络层兜底三层联防。',
    stat1Label: '白名单条目',
    stat1Sub: 'secplane_outbound_trusted 表',
    stat2Label: '近期告警',
    stat2Sub: 'requireHttps · exfiltrationGuard · outboundTrust',
    stat3Label: '在管实例',
    stat3Sub: '{count} running',
    stat4Label: '下发通道',
    stat4Sub: 'hot-reload via mtime',
    tls: {
      eyebrow: '应用层强制',
      title: '外联开启 TLS（require-https）',
      mode: '模式',
      enforce: '拦截',
      observe: '监控',
      off: '停止',
      saveApply: '保存并应用',
      desc: '在 ClawAegisEx before_tool_call 钩子里扫描工具参数中所有 URL：一旦命中 http://、ws://、ftp:// 等明文协议 → enforce 阻断 + 告警，observe 仅告警，off 跳过。MCP / 外部 LLM / Skill 出站 / curl|wget 等都覆盖。建议配合 L3 K8s NetworkPolicy 兜底。',
      recentHits: '近期命中',
      recentHitsSub: 'enforce/observe 累计',
    },
    trust: {
      eyebrow: '证书池 · 出站可信端点白名单',
      title: '外联只允许列表内的域名（可选 cert pin）',
      mode: '模式',
      enforce: '拦截',
      observe: '监控',
      off: '停止',
      saveApply: '保存并应用',
      recentBlocks: '近期拦截 {count}',
      placeholderDomain: '域名 (如 api.openai.com 或 *.openai.com)',
      placeholderFingerprint: '可选 cert SHA256 fingerprint (64 hex) — 留空表示仅域名',
      probeFingerprint: '🔍 探测指纹',
      probing: '探测中…',
      placeholderLabel: '备注 (可选)',
      add: '+ 添加',
      colStatus: '状态',
      colDomain: '域名 / Pattern',
      colFingerprint: 'SHA256 Fingerprint',
      colLabel: '备注',
      colAddedAt: '添加时间',
      loading: '加载中…',
      emptyList: '白名单为空。当前 mode={mode}：',
      emptyEnforceWarning: ' 由于列表为空，enforce 模式下所有 https 出站会被拦截（建议先加几条再切到 enforce）',
      emptyAddPrompt: ' 添加你信任的对端域名后，点"保存并应用"下发到 pod',
      onlyDomain: '仅域名（无 pinning）',
      reprobe: '重探',
      delete: '删除',
      confirmDelete: '确认删除条目 #{id}？',
      behavior: '行为',
      behaviorDesc: 'ClawAegisEx 在 before_tool_call 钩子扫描工具参数中的 https/wss URL，host 不在表里 → 阻断；observe 仅告警。支持 *.openai.com 这样的通配域名。改完点"保存并应用"，pod 内 1 秒内 hot-reload 生效。',
      certPhase2a: '证书指纹（Phase 2a）',
      certPhase2aDesc: '新增条目时点"探测指纹"，后端 TLS 握手抓 leaf cert SHA256 并填入；后台每小时自动重探所有 pinned 条目，发现指纹漂移时写入告警并刷新基线（通配条目不参与）。',
    },
    probe: {
      wildcardError: '通配域名（含 * 或 ?）无法探测，请用一个具体子域名',
      successSubject: 'subject={subject}, issuer={issuer}, 过期={expires}',
      failError: '探测失败：{error}',
      driftAlert: '⚠️ 指纹漂移已记录\n域名: {domain}\n旧: {old}…\n新: {new}…\n（基线已更新；告警面板可查"出站可信端点指纹漂移"事件）',
      matchOk: '✓ {domain} 指纹一致 (subject={subject})',
      reprobeFail: '重探失败：{error}',
    },
    error: {
      loadFail: '加载失败',
      saveFail: '保存失败',
      deleteFail: '删除失败',
      unknownError: '未知错误',
    },
  },

  ja: {
    breadcrumb1: 'セキュリティ防御',
    breadcrumb2: 'データとコンポーネントの信頼',
    breadcrumb3: 'アウトバウンドガバナンス',
    eyebrow: 'エージェントアウトバウンド相互認証',
    title: 'アウトバウンドガバナンス',
    subtitle: 'エージェントアウトバウンド呼び出し（Agent↔Agent / Skill / Markdown URL / MCP / 外部LLM）のホワイトリスト + クライアント証明書 + ネットワークレイヤーフォールバックの3層連携防御。',
    stat1Label: 'ホワイトリストエントリ',
    stat1Sub: 'secplane_outbound_trustedテーブル',
    stat2Label: '最近のアラート',
    stat2Sub: 'requireHttps · exfiltrationGuard · outboundTrust',
    stat3Label: '管理インスタンス',
    stat3Sub: '{count} running',
    stat4Label: '配信チャネル',
    stat4Sub: 'hot-reload via mtime',
    tls: {
      eyebrow: 'アプリケーション層強制',
      title: 'アウトバウンドTLS（require-https）',
      mode: 'モード',
      enforce: 'ブロック',
      observe: '監視',
      off: '停止',
      saveApply: '保存して適用',
      desc: 'ClawAegisExのbefore_tool_callフックでツールパラメータ内のすべてのURLをスキャン：http://、ws://、ftp://などの平文プロトコルが検出された場合 → ブロック+アラート、監視はアラートのみ、停止はスキップ。MCP / 外部LLM / Skillアウトバウンド / curl|wgetなどをカバー。L3 K8s NetworkPolicyフォールバックとの併用を推奨。',
      recentHits: '最近のヒット',
      recentHitsSub: 'ブロック/監視累計',
    },
    trust: {
      eyebrow: '証明書プール · アウトバウンド信頼済みエンドポイントホワイトリスト',
      title: 'アウトバウンドはリスト内のドメインのみ許可（オプション cert pin）',
      mode: 'モード',
      enforce: 'ブロック',
      observe: '監視',
      off: '停止',
      saveApply: '保存して適用',
      recentBlocks: '最近のブロック {count}',
      placeholderDomain: 'ドメイン (例: api.openai.com または *.openai.com)',
      placeholderFingerprint: 'オプション cert SHA256フィンガープリント (64 hex) — 空欄でドメインのみ',
      probeFingerprint: '🔍 フィンガープリント取得',
      probing: '取得中…',
      placeholderLabel: 'メモ (オプション)',
      add: '+ 追加',
      colStatus: 'ステータス',
      colDomain: 'ドメイン / パターン',
      colFingerprint: 'SHA256フィンガープリント',
      colLabel: 'メモ',
      colAddedAt: '追加日時',
      loading: '読み込み中…',
      emptyList: 'ホワイトリストが空です。現在のモード={mode}：',
      emptyEnforceWarning: ' リストが空のため、ブロックモードではすべてのhttpsアウトバウンドがブロックされます（ブロックに切り替える前にエントリを追加してください）',
      emptyAddPrompt: ' 信頼できるピアドメインを追加し、「保存して適用」をクリックしてポッドに配信',
      onlyDomain: 'ドメインのみ（pinningなし）',
      reprobe: '再取得',
      delete: '削除',
      confirmDelete: 'エントリ #{id} を削除しますか？',
      behavior: '動作',
      behaviorDesc: 'ClawAegisExはbefore_tool_callフックでツールパラメータ内のhttps/wss URLをスキャンします。ホストがリストにない → ブロック、監視はアラートのみ。*.openai.comのようなワイルドカードドメインをサポート。変更後、「保存して適用」をクリック、ポッドは1秒以内にhot-reloadで反映。',
      certPhase2a: '証明書フィンガープリント（Phase 2a）',
      certPhase2aDesc: 'エントリ追加時に「フィンガープリント取得」をクリックすると、バックエンドがTLSハンドシェイクでリーフ証明書のSHA256を取得・入力します。バックエンドは毎時すべてのピン留めエントリを自動再取得し、フィンガープリントのドリフトを検出するとアラートを書き込みベースラインを更新します（ワイルドカードエントリは除外）。',
    },
    probe: {
      wildcardError: 'ワイルドカードドメイン（* または ? を含む）は取得できません。具体的なサブドメインを使用してください',
      successSubject: 'subject={subject}, issuer={issuer}, 有効期限={expires}',
      failError: '取得失敗：{error}',
      driftAlert: '⚠️ フィンガープリントドリフトが記録されました\nドメイン: {domain}\n旧: {old}…\n新: {new}…\n（ベースラインは更新されました。アラートパネルで「アウトバウンド信頼済みエンドポイントフィンガープリントドリフト」イベントを確認できます）',
      matchOk: '✓ {domain} フィンガープリント一致 (subject={subject})',
      reprobeFail: '再取得失敗：{error}',
    },
    error: {
      loadFail: '読み込み失敗',
      saveFail: '保存失敗',
      deleteFail: '削除失敗',
      unknownError: '不明なエラー',
    },
  },

  ko: {
    breadcrumb1: '보안 방어',
    breadcrumb2: '데이터 및 컴포넌트 신뢰',
    breadcrumb3: '아웃바운드 거버넌스',
    eyebrow: '에이전트 아웃바운드 상호 인증',
    title: '아웃바운드 거버넌스',
    subtitle: '에이전트 아웃바운드 호출(Agent↔Agent / Skill / Markdown URL / MCP / 외부 LLM) 화이트리스트 + 클라이언트 인증서 + 네트워크 레이어 폴백 3중 연계 방어.',
    stat1Label: '화이트리스트 항목',
    stat1Sub: 'secplane_outbound_trusted 테이블',
    stat2Label: '최근 알림',
    stat2Sub: 'requireHttps · exfiltrationGuard · outboundTrust',
    stat3Label: '관리 인스턴스',
    stat3Sub: '{count} running',
    stat4Label: '배포 채널',
    stat4Sub: 'hot-reload via mtime',
    tls: {
      eyebrow: '애플리케이션 계층 강제',
      title: '아웃바운드 TLS (require-https)',
      mode: '모드',
      enforce: '차단',
      observe: '모니터',
      off: '중지',
      saveApply: '저장 및 적용',
      desc: 'ClawAegisEx의 before_tool_call 훅에서 도구 매개변수의 모든 URL을 스캔: http://, ws://, ftp:// 등 평문 프로토콜이 감지되면 → 차단 + 알림, 모니터는 알림만, 중지는 건너뜀. MCP / 외부 LLM / Skill 아웃바운드 / curl|wget 등을 모두 커버. L3 K8s NetworkPolicy 폴백과 함께 사용 권장.',
      recentHits: '최근 히트',
      recentHitsSub: '차단/모니터 누적',
    },
    trust: {
      eyebrow: '인증서 풀 · 아웃바운드 신뢰 엔드포인트 화이트리스트',
      title: '아웃바운드는 목록 내 도메인만 허용 (선택적 cert pin)',
      mode: '모드',
      enforce: '차단',
      observe: '모니터',
      off: '중지',
      saveApply: '저장 및 적용',
      recentBlocks: '최근 차단 {count}',
      placeholderDomain: '도메인 (예: api.openai.com 또는 *.openai.com)',
      placeholderFingerprint: '선택적 cert SHA256 핑거프린트 (64 hex) — 비워두면 도메인만',
      probeFingerprint: '🔍 핑거프린트 탐지',
      probing: '탐지 중…',
      placeholderLabel: '메모 (선택)',
      add: '+ 추가',
      colStatus: '상태',
      colDomain: '도메인 / 패턴',
      colFingerprint: 'SHA256 핑거프린트',
      colLabel: '메모',
      colAddedAt: '추가일',
      loading: '로딩 중…',
      emptyList: '화이트리스트가 비어 있습니다. 현재 모드={mode}:',
      emptyEnforceWarning: ' 목록이 비어 있어 차단 모드에서는 모든 https 아웃바운드가 차단됩니다 (차단으로 전환하기 전에 항목을 추가하세요)',
      emptyAddPrompt: ' 신뢰하는 피어 도메인을 추가한 후 "저장 및 적용"을 클릭하여 파드에 배포',
      onlyDomain: '도메인만 (pinning 없음)',
      reprobe: '재탐지',
      delete: '삭제',
      confirmDelete: '항목 #{id}을(를) 삭제하시겠습니까?',
      behavior: '동작',
      behaviorDesc: 'ClawAegisEx는 before_tool_call 훅에서 도구 매개변수의 https/wss URL을 스캔합니다. 호스트가 목록에 없음 → 차단, 모니터는 알림만. *.openai.com과 같은 와일드카드 도메인을 지원합니다. 변경 후 "저장 및 적용"을 클릭하면 파드가 1초 내에 hot-reload로 반영됩니다.',
      certPhase2a: '인증서 핑거프린트 (Phase 2a)',
      certPhase2aDesc: '항목 추가 시 "핑거프린트 탐지"를 클릭하면 백엔드가 TLS 핸드셰이크로 리프 인증서 SHA256을 캡처하여 입력합니다. 백엔드는 매시간 모든 고정 항목을 자동 재탐지하며, 핑거프린트 드리프트가 감지되면 알림을 작성하고 베이스라인을 업데이트합니다 (와일드카드 항목은 제외).',
    },
    probe: {
      wildcardError: '와일드카드 도메인(* 또는 ? 포함)은 탐지할 수 없습니다. 구체적인 서브도메인을 사용하세요',
      successSubject: 'subject={subject}, issuer={issuer}, 만료={expires}',
      failError: '탐지 실패: {error}',
      driftAlert: '⚠️ 핑거프린트 드리프트가 기록됨\n도메인: {domain}\n이전: {old}…\n새로: {new}…\n(베이스라인이 업데이트됨; 알림 패널에서 "아웃바운드 신뢰 엔드포인트 핑거프린트 드리프트" 이벤트 확인)',
      matchOk: '✓ {domain} 핑거프린트 일치 (subject={subject})',
      reprobeFail: '재탐지 실패: {error}',
    },
    error: {
      loadFail: '로딩 실패',
      saveFail: '저장 실패',
      deleteFail: '삭제 실패',
      unknownError: '알 수 없는 오류',
    },
  },

  de: {
    breadcrumb1: 'Sicherheitsverteidigung',
    breadcrumb2: 'Daten- und Komponentenvertrauen',
    breadcrumb3: 'Outbound-Governance',
    eyebrow: 'Agenten-Outbound-Gegenseitige Authentifizierung',
    title: 'Outbound-Governance',
    subtitle: 'Agenten-Outbound-Aufrufe (Agent↔Agent / Skill / Markdown URL / MCP / Externes LLM) Whitelist + Client-Zertifikat + Netzwerkebene-Fallback Dreifach-Verbundverteidigung.',
    stat1Label: 'Whitelist-Einträge',
    stat1Sub: 'secplane_outbound_trusted Tabelle',
    stat2Label: 'Aktuelle Warnungen',
    stat2Sub: 'requireHttps · exfiltrationGuard · outboundTrust',
    stat3Label: 'Verwaltete Instanzen',
    stat3Sub: '{count} running',
    stat4Label: 'Versandkanal',
    stat4Sub: 'hot-reload via mtime',
    tls: {
      eyebrow: 'Anwendungsschicht-Erzwingung',
      title: 'Outbound-TLS (require-https)',
      mode: 'Modus',
      enforce: 'Blockieren',
      observe: 'Überwachen',
      off: 'Aus',
      saveApply: 'Speichern & Anwenden',
      desc: 'Im ClawAegisEx before_tool_call-Hook alle URLs in Tool-Parametern scannen: Sobald http://, ws://, ftp:// oder andere Klartext-Protokolle erkannt werden → Blockieren + Warnung, Überwachen nur Warnung, Aus überspringt. Deckt MCP / Externes LLM / Skill-Outbound / curl|wget usw. ab. Empfohlen mit L3 K8s NetworkPolicy-Fallback.',
      recentHits: 'Aktuelle Treffer',
      recentHitsSub: 'Blockieren/Überwachen kumulativ',
    },
    trust: {
      eyebrow: 'Zertifikatspool · Outbound-Vertrauenswürdige Endpunkte-Whitelist',
      title: 'Outbound nur für gelistete Domains erlauben (optionaler cert pin)',
      mode: 'Modus',
      enforce: 'Blockieren',
      observe: 'Überwachen',
      off: 'Aus',
      saveApply: 'Speichern & Anwenden',
      recentBlocks: 'Aktuelle Blockierungen {count}',
      placeholderDomain: 'Domain (z.B. api.openai.com oder *.openai.com)',
      placeholderFingerprint: 'Optional cert SHA256-Fingerabdruck (64 hex) — leer für nur Domain',
      probeFingerprint: '🔍 Fingerabdruck ermitteln',
      probing: 'Ermittle…',
      placeholderLabel: 'Notiz (optional)',
      add: '+ Hinzufügen',
      colStatus: 'Status',
      colDomain: 'Domain / Muster',
      colFingerprint: 'SHA256-Fingerabdruck',
      colLabel: 'Notiz',
      colAddedAt: 'Hinzugefügt',
      loading: 'Laden…',
      emptyList: 'Whitelist ist leer. Aktueller Modus={mode}:',
      emptyEnforceWarning: ' Da die Liste leer ist, blockiert der Blockieren-Modus alle https-Outbound (Einträge hinzufügen bevor zum Blockieren-Modus gewechselt wird)',
      emptyAddPrompt: ' Vertrauenswürdige Peer-Domains hinzufügen, dann "Speichern & Anwenden" klicken um an Pods zu versenden',
      onlyDomain: 'Nur Domain (kein Pinning)',
      reprobe: 'Neu ermitteln',
      delete: 'Löschen',
      confirmDelete: 'Eintrag #{id} löschen?',
      behavior: 'Verhalten',
      behaviorDesc: 'ClawAegisEx scannt https/wss-URLs in Tool-Parametern über den before_tool_call-Hook. Host nicht in Liste → blockiert; Überwachen nur Warnung. Unterstützt Wildcard-Domains wie *.openai.com. Nach Änderungen "Speichern & Anwenden" klicken, Pods laden innerhalb von 1 Sekunde per hot-reload.',
      certPhase2a: 'Zertifikats-Fingerabdruck (Phase 2a)',
      certPhase2aDesc: 'Beim Hinzufügen von Einträgen auf "Fingerabdruck ermitteln" klicken, um per TLS-Handshake das Leaf-Cert-SHA256 zu erfassen. Backend ermittelt stündlich alle gepinnten Einträge automatisch neu; bei Fingerabdrifte Erkennung wird eine Warnung geschrieben und die Baseline aktualisiert (Wildcard-Einträge ausgeschlossen).',
    },
    probe: {
      wildcardError: 'Wildcard-Domains (mit * oder ?) können nicht ermittelt werden, bitte eine konkrete Subdomain verwenden',
      successSubject: 'subject={subject}, issuer={issuer}, Ablauf={expires}',
      failError: 'Ermittlung fehlgeschlagen: {error}',
      driftAlert: '⚠️ Fingerabdrifte erkannt\nDomain: {domain}\nAlt: {old}…\nNeu: {new}…\n(Baseline aktualisiert; Warnungs-Panel für "Outbound-vertrauenswürdige-Endpunkt-Fingerabdrifte"-Ereignis prüfen)',
      matchOk: '✓ {domain} Fingerabdruck stimmt überein (subject={subject})',
      reprobeFail: 'Neuermittlung fehlgeschlagen: {error}',
    },
    error: {
      loadFail: 'Laden fehlgeschlagen',
      saveFail: 'Speichern fehlgeschlagen',
      deleteFail: 'Löschen fehlgeschlagen',
      unknownError: 'Unbekannter Fehler',
    },
  },
};
