// ============================================
// i18n — UI strings + language context
// ============================================

// Labels here follow the visual style: two-letter country codes.
// Some codes share the same underlying string set (UK/US → en, MX → es).
const LANGS = [
  { code: "en", label: "EN", long: "English",       strings: "en" },
  { code: "br", label: "BR", long: "Português (BR)", strings: "br" },
  { code: "cn", label: "CN", long: "中文",           strings: "cn" },
  { code: "cz", label: "CZ", long: "Čeština",       strings: "cz" },
  { code: "fr", label: "FR", long: "Français",      strings: "fr" },
  { code: "de", label: "DE", long: "Deutsch",       strings: "de" },
  { code: "jp", label: "JP", long: "日本語",         strings: "ja" },
  { code: "mx", label: "MX", long: "Español (MX)",  strings: "es" },
  { code: "it", label: "IT", long: "Italiano",      strings: "it" },
];

// Map a lang code (what we store) → strings key (what's in the dictionary).
function stringsKeyFor(code) {
  const entry = LANGS.find((l) => l.code === code);
  return (entry && entry.strings) || "en";
}

// All UI chrome strings. Film body text (synopsis, notes, press quotes)
// is NOT translated here — those stay in their original language or come
// from per-film multi-lingual fields (see resolveLocalized below).
const STRINGS = {
  // Navigation
  "nav.home":          { de: "Start",      en: "Home",        it: "Home",       es: "Inicio",     ja: "ホーム",       fr: "Accueil",    br: "Início",       cn: "首页",    cz: "Domů" },
  "nav.films":         { de: "Filme",      en: "Films",       it: "Film",       es: "Películas",  ja: "作品",         fr: "Films",      br: "Filmes",       cn: "影片",    cz: "Filmy" },
  "nav.festivals":     { de: "Festivals & Awards", en: "Festivals & Awards", it: "Festivals & Awards", es: "Festivals & Awards", ja: "Festivals & Awards", fr: "Festivals & Awards", br: "Festivals & Awards", cn: "Festivals & Awards", cz: "Festivals & Awards" },
  "nav.about":         { de: "Über uns",   en: "About Us",    it: "Chi siamo",  es: "Sobre nosotros", ja: "私たちについて", fr: "À propos", br: "Sobre nós",   cn: "关于我们", cz: "O nás" },

  // Home + Films
  "films.count":       { de: "Filmografie · {n} Titel", en: "Filmography · {n} Titles", it: "Filmografia · {n} titoli", es: "Filmografía · {n} títulos", ja: "フィルモグラフィー · {n}作品", fr: "Filmographie · {n} titres", br: "Filmografia · {n} títulos", cn: "作品集 · {n} 部", cz: "Filmografie · {n} titulů" },
  "films.viewAll":     { de: "Alle Filme →", en: "View all films →", it: "Tutti i film →", es: "Ver todas las películas →", ja: "すべての作品を見る →", fr: "Voir tous les films →", br: "Ver todos os filmes →", cn: "查看全部作品 →", cz: "Zobrazit všechny filmy →" },
  "films.title":       { de: "Filme.",      en: "Films.",      it: "Film.",      es: "Películas.", ja: "作品。",       fr: "Films.",     br: "Filmes.",      cn: "影片。",  cz: "Filmy." },
  "films.kicker":      { de: "Filmografie", en: "Filmography", it: "Filmografia", es: "Filmografía", ja: "フィルモグラフィー", fr: "Filmographie", br: "Filmografia", cn: "作品集", cz: "Filmografie" },

  // Detail page meta labels
  "meta.director":     { de: "Regie",       en: "Director",    it: "Regia",      es: "Dirección",  ja: "監督",         fr: "Réalisation", br: "Direção",    cn: "导演",    cz: "Režie" },
  "meta.runtime":      { de: "Laufzeit",    en: "Runtime",     it: "Durata",     es: "Duración",   ja: "上映時間",     fr: "Durée",      br: "Duração",      cn: "片长",    cz: "Stopáž" },
  "meta.country":      { de: "Land",        en: "Country",     it: "Paese",      es: "País",       ja: "国",           fr: "Pays",       br: "País",         cn: "国家",    cz: "Země" },
  "meta.language":     { de: "Sprache",     en: "Language",    it: "Lingua",     es: "Idioma",     ja: "言語",         fr: "Langue",     br: "Idioma",       cn: "语言",    cz: "Jazyk" },
  "meta.cast":         { de: "Besetzung",   en: "Cast",        it: "Cast",       es: "Reparto",    ja: "キャスト",     fr: "Distribution", br: "Elenco",     cn: "主演",    cz: "Obsazení" },
  "meta.premiere":     { de: "Premiere",    en: "Premiere",    it: "Prima",      es: "Estreno",    ja: "プレミア",     fr: "Première",   br: "Estreia",      cn: "首映",    cz: "Premiéra" },

  // Detail sections
  "section.synopsis":  { de: "Synopsis",    en: "Synopsis",    it: "Sinossi",    es: "Sinopsis",   ja: "あらすじ",     fr: "Synopsis",   br: "Sinopse",      cn: "剧情简介", cz: "Synopse" },
  "section.notes":     { de: "Anmerkungen", en: "Notes",       it: "Note",       es: "Notas",      ja: "ノート",       fr: "Notes",      br: "Notas",        cn: "备注",    cz: "Poznámky" },
  "section.press":     { de: "Presse",      en: "Press",       it: "Stampa",     es: "Prensa",     ja: "プレス",       fr: "Presse",     br: "Imprensa",     cn: "媒体",    cz: "Tisk" },
  "section.crew":      { de: "Stab",        en: "Crew",        it: "Troupe",     es: "Equipo",     ja: "スタッフ",     fr: "Équipe",     br: "Equipe",       cn: "主创",    cz: "Štáb" },
  "section.castHdr":   { de: "Besetzung",   en: "Cast",        it: "Cast",       es: "Reparto",    ja: "キャスト",     fr: "Distribution", br: "Elenco",     cn: "主演",    cz: "Obsazení" },
  "section.fa":        { de: "Festivals & Preise", en: "Festivals & Awards", it: "Festival e Premi", es: "Festivales y Premios", ja: "映画祭 & 受賞", fr: "Festivals & Prix", br: "Festivais & Prêmios", cn: "影展与奖项", cz: "Festivaly & ceny" },
  "section.awards":    { de: "Preise",      en: "Awards",      it: "Premi",      es: "Premios",    ja: "受賞",         fr: "Prix",       br: "Prêmios",      cn: "奖项",    cz: "Ceny" },
  "section.festivals": { de: "Festivals",   en: "Festivals",   it: "Festival",   es: "Festivales", ja: "映画祭",       fr: "Festivals",  br: "Festivais",    cn: "影展",    cz: "Festivaly" },
  "section.stills":    { de: "Stills",      en: "Stills",      it: "Stills",     es: "Stills",     ja: "スチル",       fr: "Photos",     br: "Stills",       cn: "剧照",    cz: "Stills" },
  "section.production":{ de: "Produktion",  en: "Production",  it: "Produzione", es: "Producción", ja: "製作",         fr: "Production", br: "Produção",     cn: "制作",    cz: "Produkce" },
  "section.laurels":   { de: "Laurels",     en: "Laurels",     it: "Laurels",    es: "Laurels",    ja: "ローレル",     fr: "Lauriers",   br: "Louros",       cn: "桂冠",    cz: "Vavříny" },
  "section.coProd":    { de: "Koproduktion", en: "Co-Production", it: "Coproduzione", es: "Coproducción", ja: "共同製作", fr: "Coproduction", br: "Coprodução", cn: "联合制作", cz: "Koprodukce" },
  "section.funders":   { de: "Öffentliche Förderer", en: "Public funders", it: "Finanziatori pubblici", es: "Financiadores públicos", ja: "公的助成", fr: "Financeurs publics", br: "Financiadores públicos", cn: "公共资助方", cz: "Veřejní podporovatelé" },

  // Buttons + misc
  "btn.watchTrailer":  { de: "▶ Trailer ansehen", en: "▶ Watch trailer", it: "▶ Guarda il trailer", es: "▶ Ver tráiler", ja: "▶ 予告編を見る", fr: "▶ Voir la bande-annonce", br: "▶ Assistir ao trailer", cn: "▶ 观看预告片", cz: "▶ Přehrát trailer" },
  "btn.trailerEmpty":  { de: "▶ Trailer · Slot leer", en: "▶ Trailer · slot empty", it: "▶ Trailer · slot vuoto", es: "▶ Tráiler · ranura vacía", ja: "▶ 予告編 · 未登録", fr: "▶ Bande-annonce · indisponible", br: "▶ Trailer · indisponível", cn: "▶ 预告片 · 暂无", cz: "▶ Trailer · není k dispozici" },
  "trailer.consent.title":   { de: "Trailer abspielen", en: "Play trailer", it: "Riproduci il trailer", es: "Reproducir el tráiler", ja: "予告編を再生", fr: "Lire la bande-annonce", br: "Reproduzir trailer", cn: "播放预告片", cz: "Přehrát trailer" },
  "trailer.consent.body":    { de: "Beim Klick auf „Trailer starten“ wird ein Video vom externen Anbieter ({provider}) geladen. Dabei werden Ihre IP-Adresse und weitere technische Daten an den Anbieter übertragen.", en: "By clicking 'Start trailer', a video will be loaded from the external provider ({provider}). Your IP address and other technical data will be transferred to that provider.", it: "Cliccando 'Avvia trailer' verrà caricato un video dal fornitore esterno ({provider}). Il tuo indirizzo IP e altri dati tecnici saranno trasmessi al fornitore.", es: "Al hacer clic en 'Iniciar tráiler', se cargará un vídeo del proveedor externo ({provider}). Tu dirección IP y otros datos técnicos se transmitirán al proveedor.", ja: "「トレーラー再生」をクリックすると、外部プロバイダー({provider})から動画が読み込まれます。IPアドレスなどの技術データが送信されます。", fr: "En cliquant sur « Lancer la bande-annonce », une vidéo sera chargée depuis le fournisseur externe ({provider}). Votre adresse IP et d'autres données techniques seront transmises au fournisseur.", br: "Ao clicar em 'Iniciar trailer', um vídeo será carregado do fornecedor externo ({provider}). Seu endereço IP e outros dados técnicos serão transmitidos.", cn: "点击「开始播放」后，将从外部提供商（{provider}）加载视频。您的 IP 地址等技术数据将被传输。", cz: "Kliknutím na 'Spustit trailer' se načte video od externího poskytovatele ({provider}). Vaše IP adresa a další technické údaje budou poskytovateli předány." },
  "trailer.consent.button":  { de: "Trailer starten", en: "Start trailer", it: "Avvia trailer", es: "Iniciar tráiler", ja: "トレーラー再生", fr: "Lancer la bande-annonce", br: "Iniciar trailer", cn: "开始播放", cz: "Spustit trailer" },
  "trailer.consent.cancel":  { de: "Abbrechen", en: "Cancel", it: "Annulla", es: "Cancelar", ja: "キャンセル", fr: "Annuler", br: "Cancelar", cn: "取消", cz: "Zrušit" },
  "trailer.consent.privacy": { de: "Datenschutzerklärung", en: "Privacy policy", it: "Informativa sulla privacy", es: "Política de privacidad", ja: "プライバシーポリシー", fr: "Politique de confidentialité", br: "Política de privacidade", cn: "隐私政策", cz: "Zásady ochrany osobních údajů" },
  "btn.viewFilm":      { de: "Film ansehen →", en: "View film →", it: "Scopri il film →", es: "Ver película →", ja: "作品を見る →", fr: "Voir le film →", br: "Ver filme →", cn: "查看作品 →", cz: "Zobrazit film →" },
  "btn.toFilm":        { de: "Zum Film",      en: "To the film",  it: "Al film",    es: "Ver película", ja: "作品へ",      fr: "Vers le film", br: "Ao filme",   cn: "进入作品", cz: "K filmu" },
  "th.award":          { de: "Auszeichnung",  en: "Award",        it: "Premio",     es: "Premio",       ja: "受賞",        fr: "Prix",         br: "Prêmio",     cn: "奖项",     cz: "Ocenění" },
  "th.festival":       { de: "Festival",      en: "Festival",     it: "Festival",   es: "Festival",     ja: "映画祭",      fr: "Festival",     br: "Festival",   cn: "影展",     cz: "Festival" },
  "th.film":           { de: "Film",          en: "Film",         it: "Film",       es: "Película",     ja: "作品",        fr: "Film",         br: "Filme",      cn: "影片",     cz: "Film" },
  "th.year":           { de: "Jahr",          en: "Year",         it: "Anno",       es: "Año",          ja: "年",          fr: "Année",        br: "Ano",        cn: "年份",     cz: "Rok" },
  "btn.back":          { de: "← Zurück",     en: "← Back",      it: "← Indietro", es: "← Volver",   ja: "← 戻る",       fr: "← Retour",   br: "← Voltar",     cn: "← 返回",  cz: "← Zpět" },
  "btn.backToFilms":   { de: "← Zu den Filmen", en: "← Back to Films", it: "← Torna ai film", es: "← Volver a las películas", ja: "← 作品一覧へ", fr: "← Retour aux films", br: "← Voltar aos filmes", cn: "← 返回作品", cz: "← Zpět na filmy" },
  "misc.scroll":       { de: "Scrollen",    en: "Scroll",      it: "Scorri",     es: "Desliza",    ja: "スクロール",   fr: "Défiler",    br: "Rolar",        cn: "滚动",    cz: "Posouvat" },
  "misc.comingSoon":   { de: "Bald verfügbar.", en: "Coming soon.", it: "Prossimamente.", es: "Próximamente.", ja: "近日公開。", fr: "Prochainement.", br: "Em breve.", cn: "即将上映。", cz: "Již brzy." },
  "misc.comingSoonShort": { de: "Demnächst", en: "Coming soon", it: "Prossimamente", es: "Próximamente", ja: "近日公開", fr: "Prochainement", br: "Em breve", cn: "即将上映", cz: "Již brzy" },
  "misc.inDev":        { de: "In Entwicklung", en: "In development", it: "In sviluppo", es: "En desarrollo", ja: "開発中", fr: "En développement", br: "Em desenvolvimento", cn: "开发中", cz: "Ve vývoji" },
  "misc.trailerLabel": { de: "Trailer",     en: "Trailer",     it: "Trailer",    es: "Tráiler",    ja: "予告編",       fr: "Bande-annonce", br: "Trailer",  cn: "预告片",  cz: "Trailer" },

  // Festivals & Awards page
  "fa.title":          { de: "Festival & Awards", en: "Festival & Awards", it: "Festival & Awards", es: "Festival & Awards", ja: "Festival & Awards", fr: "Festival & Awards", br: "Festival & Awards", cn: "Festival & Awards", cz: "Festival & Awards" },

  // About
  "about.kicker":      { de: "Über uns",    en: "About Us",    it: "Chi siamo",  es: "Sobre nosotros", ja: "私たちについて", fr: "À propos", br: "Sobre nós", cn: "关于我们", cz: "O nás" },
  "about.title":       { de: "cinephiles films", en: "cinephiles films", it: "cinephiles films", es: "cinephiles films", ja: "cinephiles films", fr: "cinephiles films", br: "cinephiles films", cn: "cinephiles films", cz: "cinephiles films" },
  "about.location":    { de: "Köln",        en: "Cologne",     it: "Colonia",    es: "Colonia",    ja: "ケルン",       fr: "Cologne",    br: "Colônia",      cn: "科隆",    cz: "Kolín nad Rýnem" },
  "about.founded":     { de: "Gegründet 2013", en: "Established 2013", it: "Fondata nel 2013", es: "Fundada en 2013", ja: "2013年設立", fr: "Fondée en 2013", br: "Fundada em 2013", cn: "成立于 2013 年", cz: "Založeno 2013" },
  "about.lead":        { de: "Wir sind ein Kollektiv unabhängiger Filmemacher:innen aus Köln und Wuppertal, das ein Kino jenseits gängiger Normen und Regeln schafft.", en: "We are a union of independent filmmakers, based in Cologne and Wuppertal, creating cinema free from common norms and rules.", it: "Siamo un collettivo di filmmaker indipendenti di Colonia e Wuppertal, dedicato a un cinema libero da norme e regole comuni.", es: "Somos un colectivo de cineastas independientes de Colonia y Wuppertal que crea un cine libre de normas comunes.", ja: "私たちはケルンとヴッパータールを拠点とする独立系映画作家のコレクティブで、既成の枠にとらわれない映画をつくっています。", fr: "Nous sommes un collectif de cinéastes indépendants basés à Cologne et Wuppertal, créant un cinéma libéré des normes établies.", br: "Somos um coletivo de cineastas independentes de Colônia e Wuppertal, criando um cinema livre das normas estabelecidas.", cn: "我们是一群驻扎在科隆和伍珀塔尔的独立电影人，致力于创造摆脱常规的电影。", cz: "Jsme sdružení nezávislých filmařů z Kolína nad Rýnem a Wuppertalu, které tvoří kino mimo zavedené normy." },
  "about.body":        { de: "Unsere Filme wurden auf mehreren internationalen Festivals gezeigt und ausgezeichnet, u.a. Internationale Hofer Filmtage, Grenzland Filmtage Selb, Torino Underground Filmfestival, Fünf Seen Filmfestival, Author's International Film Festival Guadalajara und FIPA Biarritz.", en: "Our films have been shown and awarded at several international festivals, such as Internationale Hofer Filmtage, Grenzland Filmtage Selb, Torino Underground Filmfestival, Fünf Seen Filmfestival, Author's International Film Festival Guadalajara and FIPA Biarritz.", it: "I nostri film sono stati proiettati e premiati in numerosi festival internazionali.", es: "Nuestras películas se han proyectado y premiado en numerosos festivales internacionales.", ja: "私たちの作品は国際映画祭で上映・受賞されてきました。", fr: "Nos films ont été projetés et primés dans plusieurs festivals internationaux.", br: "Nossos filmes foram exibidos e premiados em diversos festivais internacionais.", cn: "我们的作品在多个国际电影节上展映并获奖。", cz: "Naše filmy byly uváděny a oceňovány na mnoha mezinárodních festivalech." },
  "about.body2":       { de: "Jeder unserer Filme entstand unabhängig, mit Leidenschaft und dem reinen Willen, neue Wege des Erzählens und kinematografische Welten zu erschaffen. Unter dem Pseudonym „Aki T. Weisshaus\" drehten wir unseren Spielfilm SOMEHOW als Kollektiv, frei von klassifizierten Gewerken, um zu zeigen, dass Film eine Kunst vieler Köpfe und Seelen ist, die keine vertikale Hierarchie braucht.", en: "Each of our films was made independently, with passion and the pure will to create new ways of storytelling and cinematic worlds. Under the pseudonym 'Aki T. Weisshaus' we shot our feature film SOMEHOW as a collective, free from classified departments, to show that film is an art of many minds and souls that doesn't need a vertical hierarchy.", it: "Ogni nostro film nasce in modo indipendente, con passione e la volontà di creare nuovi linguaggi narrativi.", es: "Cada una de nuestras películas se realiza de forma independiente, con pasión y voluntad de crear nuevas narrativas.", ja: "すべての作品は独立制作で、新しい語りと映画的世界を生み出す情熱で作られています。", fr: "Chacun de nos films est réalisé de manière indépendante, avec passion et la volonté de créer de nouvelles formes narratives.", br: "Cada um de nossos filmes é feito de forma independente, com paixão e vontade de criar novas narrativas.", cn: "我们的每一部影片都独立制作，充满激情，旨在开创全新的叙事方式。", cz: "Každý z našich filmů vzniká nezávisle, s vášní a vůlí hledat nové způsoby vyprávění." },
  "about.body3":       { de: "Wir suchen ständig nach neuen Ideen und Kooperationen mit Menschen, die Kino lieben und wie wir einzigartige Geschichten erzählen wollen.", en: "We are constantly looking for new ideas and new collaborations with people that love cinema and telling unique stories like we do.", it: "Cerchiamo costantemente nuove idee e collaborazioni.", es: "Buscamos constantemente nuevas ideas y colaboraciones.", ja: "私たちは常に新しいアイデアとコラボレーションを求めています。", fr: "Nous sommes toujours à la recherche de nouvelles idées et collaborations.", br: "Estamos sempre em busca de novas ideias e colaborações.", cn: "我们一直在寻找新的创意与合作。", cz: "Neustále hledáme nové nápady a spolupráce." },
  "about.operator":    { de: "Betreiber",   en: "Operator",    it: "Titolare",   es: "Operador",   ja: "運営者",       fr: "Opérateur",  br: "Operador",     cn: "运营方",  cz: "Provozovatel" },
  "about.contact":     { de: "Kontakt",     en: "Contact",     it: "Contatti",   es: "Contacto",   ja: "お問い合わせ", fr: "Contact",    br: "Contato",      cn: "联系",    cz: "Kontakt" },
  "about.legal":       { de: "Rechtliches", en: "Legal",       it: "Note legali", es: "Legal",      ja: "法的情報",     fr: "Mentions légales", br: "Legal", cn: "法律信息", cz: "Právní informace" },

  // Footer
  "footer.production": { de: "Filmproduktion", en: "Film Production", it: "Produzione Cinematografica", es: "Producción Cinematográfica", ja: "映画製作", fr: "Production cinématographique", br: "Produção Cinematográfica", cn: "电影制作", cz: "Filmová produkce" },
  "footer.contact":    { de: "Kontakt",     en: "Contact",     it: "Contatti",   es: "Contacto",   ja: "お問い合わせ", fr: "Contact",    br: "Contato",      cn: "联系",    cz: "Kontakt" },
  "footer.legal":      { de: "Rechtliches", en: "Legal",       it: "Note legali", es: "Legal",      ja: "法的情報",     fr: "Mentions légales", br: "Legal", cn: "法律信息", cz: "Právní informace" },
  "footer.rights":     { de: "© 2026 · Alle Rechte vorbehalten", en: "© 2026 · All rights reserved", it: "© 2026 · Tutti i diritti riservati", es: "© 2026 · Todos los derechos reservados", ja: "© 2026 · 無断複写・転載を禁じます", fr: "© 2026 · Tous droits réservés", br: "© 2026 · Todos os direitos reservados", cn: "© 2026 · 版权所有", cz: "© 2026 · Všechna práva vyhrazena" },
  "footer.imprint":    { de: "Impressum",   en: "Imprint",     it: "Note legali", es: "Aviso legal", ja: "法定表記",    fr: "Mentions légales", br: "Imprint", cn: "版本说明", cz: "Tiráž" },
  "footer.privacy":    { de: "Datenschutzerklärung", en: "Privacy Policy", it: "Informativa sulla privacy", es: "Política de privacidad", ja: "プライバシーポリシー", fr: "Politique de confidentialité", br: "Política de privacidade", cn: "隐私政策", cz: "Ochrana soukromí" },
  "footer.fa":         { de: "Festivals & Awards", en: "Festivals & Awards", it: "Festivals & Awards", es: "Festivals & Awards", ja: "Festivals & Awards", fr: "Festivals & Awards", br: "Festivals & Awards", cn: "Festivals & Awards", cz: "Festivals & Awards" },

  // Language toggle
  "lang.label":        { de: "Sprache",     en: "Language",    it: "Lingua",     es: "Idioma",     ja: "言語",         fr: "Langue",     br: "Idioma",       cn: "语言",    cz: "Jazyk" },

  // Auto-detection toast (shows briefly when site auto-selected a language)
  "lang.autoNotice":   { de: "Sprache automatisch gewählt:", en: "Language auto-selected:", it: "Lingua selezionata automaticamente:", es: "Idioma seleccionado automáticamente:", ja: "自動的に選択された言語:", fr: "Langue sélectionnée automatiquement :", br: "Idioma selecionado automaticamente:", cn: "已自动选择语言：", cz: "Jazyk vybrán automaticky:" },
  "lang.switchToEn":   { de: "Auf English umstellen", en: "Switch to English", it: "Passa all'inglese", es: "Cambiar a inglés", ja: "英語に切り替え", fr: "Passer à l'anglais", br: "Mudar para inglês", cn: "切换到英文", cz: "Přepnout na angličtinu" },
  "lang.dismiss":      { de: "Schließen",   en: "Close",       it: "Chiudi",     es: "Cerrar",     ja: "閉じる",       fr: "Fermer",     br: "Fechar",       cn: "关闭",    cz: "Zavřít" },

  // Filter pills (home)
  "filter.all":         { de: "Alle",         en: "All",           it: "Tutti",          es: "Todos",          ja: "すべて",   fr: "Tout",          br: "Todos",           cn: "全部",     cz: "Vše" },
  "filter.feature":     { de: "Spielfilm",    en: "Feature",       it: "Lungometraggio", es: "Largometraje",   ja: "劇映画",   fr: "Long métrage",  br: "Longa",           cn: "剧情长片", cz: "Hraný film" },
  "filter.documentary": { de: "Dokumentarfilm", en: "Documentary", it: "Documentario",   es: "Documental",     ja: "ドキュメンタリー", fr: "Documentaire", br: "Documentário", cn: "纪录片", cz: "Dokument" },

  // Genre labels (used on film rows/cards)
  "genre.feature":      { de: "Spielfilm",    en: "Feature",        it: "Lungometraggio", es: "Largometraje", ja: "劇映画",       fr: "Long métrage",    br: "Longa",           cn: "剧情长片", cz: "Hraný film" },
  "genre.documentary":  { de: "Dokumentarfilm", en: "Documentary",  it: "Documentario",   es: "Documental",   ja: "ドキュメンタリー", fr: "Documentaire",   br: "Documentário",    cn: "纪录片",   cz: "Dokument" },
  "genre.short":        { de: "Kurzfilm",     en: "Short",          it: "Cortometraggio", es: "Cortometraje", ja: "短編",         fr: "Court métrage",   br: "Curta",           cn: "短片",     cz: "Krátký film" },
  "genre.inDevelopment": { de: "In Entwicklung", en: "In development", it: "In sviluppo", es: "En desarrollo", ja: "開発中",      fr: "En développement", br: "Em desenvolvimento", cn: "开发中", cz: "Ve vývoji" },
  "genre.roadMovie":    { de: "Road Movie",   en: "Road movie",     it: "Road movie",     es: "Road movie",   ja: "ロードムービー", fr: "Road movie",     br: "Road movie",      cn: "公路电影", cz: "Road movie" },
};

const GENRE_KEY_MAP = {
  "feature": "genre.feature",
  "documentary": "genre.documentary",
  "short": "genre.short",
  "in development": "genre.inDevelopment",
  "road movie": "genre.roadMovie",
};

function translateGenre(g, t) {
  if (!g) return g;
  const key = GENRE_KEY_MAP[String(g).trim().toLowerCase()];
  return key ? t(key) : g;
}

function translateGenres(arr, t) {
  if (!Array.isArray(arr)) return "";
  return arr.map((g) => translateGenre(g, t)).join(" / ");
}

const LanguageContext = React.createContext({
  lang: "en",
  setLang: () => {},
  t: (k) => k,
});

// Map einer beliebigen BCP47-Browser-Sprache auf einen unserer Codes.
// Gibt null zurück wenn keine Übereinstimmung — Aufrufer entscheidet über Fallback.
function detectFromBcp47(raw) {
  const nav = String(raw || "").toLowerCase();
  if (!nav) return null;
  if (nav.startsWith("de")) return "de";
  if (nav.startsWith("fr")) return "fr";
  if (nav.startsWith("it")) return "it";
  if (nav.startsWith("pt")) return "br";
  if (nav.startsWith("es")) return "mx";
  if (nav.startsWith("cs")) return "cz";
  if (nav.startsWith("sk")) return "cz"; // Slowakisch teilt sich mit cz
  if (nav.startsWith("zh")) return "cn";
  if (nav.startsWith("ja")) return "jp";
  if (nav.startsWith("en")) return "en";
  return null;
}

function LanguageProvider({ children }) {
  // Tupel-State: lang + ob die Wahl per Auto-Detection fiel.
  // Auto-Detection = nichts in URL-Param und nichts in localStorage,
  // also Sprache aus navigator.languages abgeleitet.
  const [state, setState] = useState(() => {
    // 1) URL-Param ?lang=xx — höchste Priorität (Marketing-Links, Sharing).
    try {
      const params = new URLSearchParams(window.location.search || "");
      let urlLang = (params.get("lang") || "").toLowerCase();
      if (urlLang === "uk" || urlLang === "us") urlLang = "en";
      if (urlLang && LANGS.find((l) => l.code === urlLang)) {
        return { lang: urlLang, autoDetected: false };
      }
    } catch (e) { /* noop */ }

    // 2) Persistierte User-Wahl (vorherige Sessions).
    let saved = localStorage.getItem("cine-lang");
    if (saved === "uk" || saved === "us") saved = "en";
    if (saved && LANGS.find((l) => l.code === saved)) {
      return { lang: saved, autoDetected: false };
    }

    // 3) Browser-Präferenz-Liste durchgehen (navigator.languages ist ein Array
    //    in Präferenz-Reihenfolge — viele User haben Mehrsprachigkeit eingestellt).
    const langPrefs = (navigator.languages && navigator.languages.length)
      ? navigator.languages
      : [navigator.language || "en"];
    for (const raw of langPrefs) {
      const hit = detectFromBcp47(raw);
      if (hit) return { lang: hit, autoDetected: true };
    }

    // 4) Letzter Fallback.
    return { lang: "en", autoDetected: false };
  });

  const lang = state.lang;
  const [toastDismissed, setToastDismissed] = useState(false);

  useEffect(() => {
    localStorage.setItem("cine-lang", lang);
    document.documentElement.lang = lang;
  }, [lang]);

  // Toast nach 5s automatisch ausblenden — und nur wenn eine nicht-englische
  // Sprache auto-detected wurde (englisch-User merken nichts, brauchen kein Toast).
  useEffect(() => {
    if (state.autoDetected && !toastDismissed && lang !== "en") {
      const t = setTimeout(() => setToastDismissed(true), 5000);
      return () => clearTimeout(t);
    }
  }, [state.autoDetected, toastDismissed, lang]);

  const setLang = (l) => {
    setState({ lang: l, autoDetected: false });
    setToastDismissed(true);
  };

  const t = (key, vars) => {
    const entry = STRINGS[key];
    if (!entry) return key;
    const sk = stringsKeyFor(lang);
    let s = entry[sk] || entry.en || key;
    if (vars) for (const k in vars) s = s.replace(`{${k}}`, vars[k]);
    return s;
  };

  const showToast = state.autoDetected && !toastDismissed && lang !== "en";
  const langEntry = LANGS.find((l) => l.code === lang) || LANGS[0];

  const value = { lang, setLang, t };
  return React.createElement(
    LanguageContext.Provider,
    { value },
    children,
    showToast && React.createElement(LanguageAutoToast, {
      key: "lang-toast",
      langLabel: langEntry.long,
      t,
      onSwitchToEn: () => setLang("en"),
      onDismiss: () => setToastDismissed(true),
    })
  );
}

// Toast-Banner: erscheint kurz bei erstem Besuch wenn die Seite eine
// nicht-englische Sprache aus dem Browser abgeleitet hat. Schließt sich nach 5s
// von selbst, lässt sich manuell schließen, und bietet One-Click-Switch auf EN.
function LanguageAutoToast({ langLabel, t, onSwitchToEn, onDismiss }) {
  return React.createElement(
    "div",
    { className: "lang-auto-toast", role: "status", "aria-live": "polite" },
    React.createElement("span", { className: "lang-auto-toast__text" },
      t("lang.autoNotice") + " " + langLabel
    ),
    React.createElement("button", {
      className: "lang-auto-toast__btn",
      onClick: onSwitchToEn,
      type: "button",
    }, t("lang.switchToEn")),
    React.createElement("button", {
      className: "lang-auto-toast__close",
      onClick: onDismiss,
      type: "button",
      "aria-label": t("lang.dismiss"),
      title: t("lang.dismiss"),
    }, "×")
  );
}

function useLang() {
  return React.useContext(LanguageContext);
}

// Resolve a field that may be either a plain string (legacy) or a
// per-language object like { de: "...", en: "...", it: "...", es: "..." }.
// Falls back to the first non-empty value.
function resolveLocalized(value, lang) {
  if (value == null) return "";
  if (typeof value === "string") return value;
  if (typeof value === "object") {
    const sk = stringsKeyFor(lang);
    if (value[sk] && value[sk].length > 0) return value[sk];
    for (const fallback of ["en", "de", "fr", "it", "es"]) {
      if (value[fallback] && value[fallback].length > 0) return value[fallback];
    }
    for (const k in value) if (value[k]) return value[k];
  }
  return "";
}

Object.assign(window, {
  LANGS,
  STRINGS,
  LanguageContext,
  LanguageProvider,
  useLang,
  resolveLocalized,
  stringsKeyFor,
  translateGenre,
  translateGenres,
});
