// Minimal i18n for the Wiki UI. Keys are stable identifiers; values are
// BCP-47-tagged translations. Unknown tags fall back to English.

type WikiI18nKey =
  | "wiki"
  | "topics"
  | "download"
  | "searchPlaceholder"
  | "regenerate"
  | "generate"
  | "regenerating"
  | "generating"
  | "anotherLanguage"       // "Regenerate/Generate in another language"
  | "regenerateInLabel"     // "Regenerate in…" menu header
  | "generateInLabel"       // "Generate in…" menu header
  | "stale"
  | "justNow"
  | "minutesAgo"            // "{n}m ago"
  | "hoursAgo"              // "{n}h ago"
  | "daysAgo"               // "{n}d ago"
  | "versionHistory"
  | "currentVersion"
  | "versionLabel"          // "Version {n}"
  | "pagesSuffix"           // "{n} pages"
  | "generatedAgo"          // "Generated {ago}"
  | "noPreviousVersions"
  | "noWikiYet"
  | "noWikiEmptySubtitle"   // "Generate a wiki for this channel. …"
  | "generateWikiButton"    // button text on empty state
  | "memoriesSuffix"        // "{n} memories"
  | "subTopics";            // "Sub-topics"

const TRANSLATIONS: Record<string, Partial<Record<WikiI18nKey, string>>> = {
  en: {
    wiki: "Wiki",
    topics: "Topics",
    download: "Download",
    searchPlaceholder: "Search this page",
    regenerate: "Regenerate",
    generate: "Generate",
    regenerating: "Regenerating",
    generating: "Generating",
    anotherLanguage: "in another language",
    regenerateInLabel: "Regenerate in…",
    generateInLabel: "Generate in…",
    stale: "Stale",
    justNow: "just now",
    minutesAgo: "{n}m ago",
    hoursAgo: "{n}h ago",
    daysAgo: "{n}d ago",
    versionHistory: "Version History",
    currentVersion: "Current version",
    versionLabel: "Version {n}",
    pagesSuffix: "{n} pages",
    generatedAgo: "Generated {ago}",
    noPreviousVersions: "No previous versions yet.",
    noWikiYet: "No Wiki Yet",
    noWikiEmptySubtitle: "Generate a wiki for this channel. Pick a language from the dropdown to generate in another language.",
    generateWikiButton: "Generate",
    memoriesSuffix: "{n} memories",
    subTopics: "Sub-topics",
  },
  "zh-HK": {
    wiki: "維基",
    topics: "主題",
    download: "下載",
    searchPlaceholder: "搜尋此頁",
    regenerate: "重新生成",
    generate: "生成",
    regenerating: "重新生成中",
    generating: "生成中",
    anotherLanguage: "用其他語言生成",
    regenerateInLabel: "重新生成語言…",
    generateInLabel: "生成語言…",
    stale: "已過時",
    justNow: "剛剛",
    minutesAgo: "{n} 分鐘前",
    hoursAgo: "{n} 小時前",
    daysAgo: "{n} 天前",
    versionHistory: "版本歷史",
    currentVersion: "目前版本",
    versionLabel: "版本 {n}",
    pagesSuffix: "{n} 頁",
    generatedAgo: "生成於 {ago}",
    noPreviousVersions: "暫無以前的版本。",
    noWikiYet: "尚未有維基",
    noWikiEmptySubtitle: "為此頻道生成維基。從下拉選單揀選其他語言生成。",
    generateWikiButton: "生成",
    memoriesSuffix: "{n} 則記憶",
    subTopics: "子主題",
  },
  "zh-TW": {
    wiki: "維基",
    topics: "主題",
    download: "下載",
    searchPlaceholder: "搜尋此頁",
    regenerate: "重新生成",
    generate: "生成",
    regenerating: "重新生成中",
    generating: "生成中",
    anotherLanguage: "用其他語言生成",
    regenerateInLabel: "重新生成語言…",
    generateInLabel: "生成語言…",
    stale: "已過時",
    justNow: "剛剛",
    minutesAgo: "{n} 分鐘前",
    hoursAgo: "{n} 小時前",
    daysAgo: "{n} 天前",
    versionHistory: "版本歷史",
    currentVersion: "目前版本",
    versionLabel: "版本 {n}",
    pagesSuffix: "{n} 頁",
    generatedAgo: "生成於 {ago}",
    noPreviousVersions: "尚無以前的版本。",
    noWikiYet: "尚未有維基",
    noWikiEmptySubtitle: "為此頻道生成維基。從下拉選單選擇其他語言生成。",
    generateWikiButton: "生成",
    memoriesSuffix: "{n} 則記憶",
    subTopics: "子主題",
  },
  "zh-CN": {
    wiki: "维基",
    topics: "主题",
    download: "下载",
    searchPlaceholder: "搜索此页",
    regenerate: "重新生成",
    generate: "生成",
    regenerating: "重新生成中",
    generating: "生成中",
    anotherLanguage: "用其他语言生成",
    regenerateInLabel: "重新生成语言…",
    generateInLabel: "生成语言…",
    stale: "已过时",
    justNow: "刚刚",
    minutesAgo: "{n} 分钟前",
    hoursAgo: "{n} 小时前",
    daysAgo: "{n} 天前",
    versionHistory: "版本历史",
    currentVersion: "当前版本",
    versionLabel: "版本 {n}",
    pagesSuffix: "{n} 页",
    generatedAgo: "生成于 {ago}",
    noPreviousVersions: "暂无以前的版本。",
    noWikiYet: "尚无维基",
    noWikiEmptySubtitle: "为此频道生成维基。从下拉菜单选择其他语言生成。",
    generateWikiButton: "生成",
    memoriesSuffix: "{n} 条记忆",
    subTopics: "子主题",
  },
  ja: {
    wiki: "ウィキ",
    topics: "トピック",
    download: "ダウンロード",
    searchPlaceholder: "このページを検索",
    regenerate: "再生成",
    generate: "生成",
    regenerating: "再生成中",
    generating: "生成中",
    anotherLanguage: "別の言語で生成",
    regenerateInLabel: "再生成する言語…",
    generateInLabel: "生成する言語…",
    stale: "古い",
    justNow: "たった今",
    minutesAgo: "{n} 分前",
    hoursAgo: "{n} 時間前",
    daysAgo: "{n} 日前",
    versionHistory: "バージョン履歴",
    currentVersion: "現在のバージョン",
    versionLabel: "バージョン {n}",
    pagesSuffix: "{n} ページ",
    generatedAgo: "{ago}に生成",
    noPreviousVersions: "以前のバージョンはありません。",
    noWikiYet: "ウィキはまだありません",
    noWikiEmptySubtitle: "このチャンネル用のウィキを生成してください。別の言語で生成するにはドロップダウンから選択します。",
    generateWikiButton: "生成",
    memoriesSuffix: "{n} 件のメモリ",
    subTopics: "サブトピック",
  },
  ko: {
    wiki: "위키",
    topics: "주제",
    download: "다운로드",
    searchPlaceholder: "이 페이지 검색",
    regenerate: "다시 생성",
    generate: "생성",
    regenerating: "다시 생성 중",
    generating: "생성 중",
    anotherLanguage: "다른 언어로 생성",
    regenerateInLabel: "다시 생성 언어…",
    generateInLabel: "생성 언어…",
    stale: "오래됨",
    justNow: "방금",
    minutesAgo: "{n}분 전",
    hoursAgo: "{n}시간 전",
    daysAgo: "{n}일 전",
    versionHistory: "버전 기록",
    currentVersion: "현재 버전",
    versionLabel: "버전 {n}",
    pagesSuffix: "{n} 페이지",
    generatedAgo: "{ago}에 생성",
    noPreviousVersions: "이전 버전이 없습니다.",
    noWikiYet: "위키가 아직 없습니다",
    noWikiEmptySubtitle: "이 채널에 대한 위키를 생성하세요. 드롭다운에서 다른 언어를 선택하여 생성할 수 있습니다.",
    generateWikiButton: "생성",
    memoriesSuffix: "{n}개의 기억",
    subTopics: "하위 주제",
  },
  es: {
    wiki: "Wiki",
    topics: "Temas",
    download: "Descargar",
    searchPlaceholder: "Buscar en esta página",
    regenerate: "Regenerar",
    generate: "Generar",
    regenerating: "Regenerando",
    generating: "Generando",
    anotherLanguage: "en otro idioma",
    regenerateInLabel: "Regenerar en…",
    generateInLabel: "Generar en…",
    stale: "Desactualizado",
    justNow: "ahora mismo",
    minutesAgo: "hace {n}m",
    hoursAgo: "hace {n}h",
    daysAgo: "hace {n}d",
    versionHistory: "Historial de versiones",
    currentVersion: "Versión actual",
    versionLabel: "Versión {n}",
    pagesSuffix: "{n} páginas",
    generatedAgo: "Generado {ago}",
    noPreviousVersions: "Aún no hay versiones anteriores.",
    noWikiYet: "Aún no hay wiki",
    noWikiEmptySubtitle: "Genera un wiki para este canal. Elige un idioma del menú para generarlo en otro idioma.",
    generateWikiButton: "Generar",
    memoriesSuffix: "{n} recuerdos",
    subTopics: "Subtemas",
  },
  fr: {
    wiki: "Wiki",
    topics: "Sujets",
    download: "Télécharger",
    searchPlaceholder: "Rechercher dans cette page",
    regenerate: "Régénérer",
    generate: "Générer",
    regenerating: "Régénération",
    generating: "Génération",
    anotherLanguage: "dans une autre langue",
    regenerateInLabel: "Régénérer en…",
    generateInLabel: "Générer en…",
    stale: "Obsolète",
    justNow: "à l'instant",
    minutesAgo: "il y a {n} min",
    hoursAgo: "il y a {n} h",
    daysAgo: "il y a {n} j",
    versionHistory: "Historique des versions",
    currentVersion: "Version actuelle",
    versionLabel: "Version {n}",
    pagesSuffix: "{n} pages",
    generatedAgo: "Généré {ago}",
    noPreviousVersions: "Aucune version précédente pour le moment.",
    noWikiYet: "Pas encore de wiki",
    noWikiEmptySubtitle: "Générez un wiki pour ce canal. Choisissez une langue dans le menu pour générer dans une autre langue.",
    generateWikiButton: "Générer",
    memoriesSuffix: "{n} souvenirs",
    subTopics: "Sous-thèmes",
  },
  de: {
    wiki: "Wiki",
    topics: "Themen",
    download: "Herunterladen",
    searchPlaceholder: "Diese Seite durchsuchen",
    regenerate: "Neu generieren",
    generate: "Generieren",
    regenerating: "Wird neu generiert",
    generating: "Wird generiert",
    anotherLanguage: "in einer anderen Sprache",
    regenerateInLabel: "Neu generieren in…",
    generateInLabel: "Generieren in…",
    stale: "Veraltet",
    justNow: "gerade eben",
    minutesAgo: "vor {n} Min.",
    hoursAgo: "vor {n} Std.",
    daysAgo: "vor {n} Tagen",
    versionHistory: "Versionsverlauf",
    currentVersion: "Aktuelle Version",
    versionLabel: "Version {n}",
    pagesSuffix: "{n} Seiten",
    generatedAgo: "Generiert {ago}",
    noPreviousVersions: "Noch keine früheren Versionen.",
    noWikiYet: "Noch kein Wiki",
    noWikiEmptySubtitle: "Erzeugen Sie ein Wiki für diesen Kanal. Wählen Sie eine Sprache aus dem Menü, um in einer anderen Sprache zu erzeugen.",
    generateWikiButton: "Generieren",
    memoriesSuffix: "{n} Erinnerungen",
    subTopics: "Unterthemen",
  },
};

export function wikiT(lang: string | undefined, key: WikiI18nKey, vars?: Record<string, string | number>): string {
  const langMap = (lang && TRANSLATIONS[lang]) || TRANSLATIONS.en;
  let template = langMap[key] ?? TRANSLATIONS.en[key] ?? "";
  if (vars) {
    for (const [k, v] of Object.entries(vars)) {
      template = template.replace(new RegExp(`\\{${k}\\}`, "g"), String(v));
    }
  }
  return template;
}
