/* i18n — 30 languages, translation registry, hook, and switcher modal */

const { createContext, useContext } = React;

/* ---- Languages catalog ----
   Grouped by region for the picker. Coverage = % of UI strings translated.
   RTL flag drives <html dir="rtl"> when selected. */
const LANGUAGES = [
  // Americas + Europe (Latin)
  { code: 'en',    name: 'English',                native: 'English',           region: 'Global',     coverage: 100 },
  { code: 'es',    name: 'Spanish',                native: 'Español',           region: 'Americas',   coverage: 96 },
  { code: 'pt-br', name: 'Portuguese (Brazil)',    native: 'Português (Brasil)',region: 'Americas',   coverage: 95 },
  { code: 'pt',    name: 'Portuguese (Portugal)',  native: 'Português',         region: 'Europe',     coverage: 93 },
  { code: 'fr',    name: 'French',                 native: 'Français',          region: 'Europe',     coverage: 96 },
  { code: 'de',    name: 'German',                 native: 'Deutsch',           region: 'Europe',     coverage: 96 },
  { code: 'it',    name: 'Italian',                native: 'Italiano',          region: 'Europe',     coverage: 94 },
  { code: 'nl',    name: 'Dutch',                  native: 'Nederlands',        region: 'Europe',     coverage: 92 },
  { code: 'pl',    name: 'Polish',                 native: 'Polski',            region: 'Europe',     coverage: 91 },
  { code: 'sv',    name: 'Swedish',                native: 'Svenska',           region: 'Europe',     coverage: 89 },
  { code: 'fi',    name: 'Finnish',                native: 'Suomi',             region: 'Europe',     coverage: 88 },
  { code: 'tr',    name: 'Turkish',                native: 'Türkçe',            region: 'Europe',     coverage: 93 },
  { code: 'ru',    name: 'Russian',                native: 'Русский',           region: 'Europe',     coverage: 94 },
  { code: 'uk',    name: 'Ukrainian',              native: 'Українська',        region: 'Europe',     coverage: 89 },
  // Middle East / Africa
  { code: 'ar',    name: 'Arabic',                 native: 'العربية',           region: 'MENA',       coverage: 95, rtl: true },
  { code: 'fa',    name: 'Persian',                native: 'فارسی',             region: 'MENA',       coverage: 88, rtl: true },
  { code: 'he',    name: 'Hebrew',                 native: 'עברית',             region: 'MENA',       coverage: 86, rtl: true },
  // South / Southeast Asia
  { code: 'hi',    name: 'Hindi',                  native: 'हिन्दी',              region: 'South Asia', coverage: 94 },
  { code: 'bn',    name: 'Bengali',                native: 'বাংলা',              region: 'South Asia', coverage: 88 },
  { code: 'ta',    name: 'Tamil',                  native: 'தமிழ்',              region: 'South Asia', coverage: 86 },
  { code: 'ur',    name: 'Urdu',                   native: 'اردو',              region: 'South Asia', coverage: 87, rtl: true },
  { code: 'id',    name: 'Indonesian',             native: 'Bahasa Indonesia',  region: 'SEA',        coverage: 96 },
  { code: 'ms',    name: 'Malay',                  native: 'Bahasa Melayu',     region: 'SEA',        coverage: 92 },
  { code: 'vi',    name: 'Vietnamese',             native: 'Tiếng Việt',        region: 'SEA',        coverage: 93 },
  { code: 'th',    name: 'Thai',                   native: 'ไทย',               region: 'SEA',        coverage: 90 },
  { code: 'fil',   name: 'Filipino',               native: 'Filipino',          region: 'SEA',        coverage: 88 },
  // East Asia
  { code: 'zh-cn', name: 'Chinese (Simplified)',   native: '简体中文',           region: 'East Asia',  coverage: 95 },
  { code: 'zh-tw', name: 'Chinese (Traditional)',  native: '繁體中文',           region: 'East Asia',  coverage: 93 },
  { code: 'ja',    name: 'Japanese',               native: '日本語',             region: 'East Asia',  coverage: 95 },
  { code: 'ko',    name: 'Korean',                 native: '한국어',             region: 'East Asia',  coverage: 94 },
];

/* ---- Translations ----
   Critical UI strings translated for all 30 languages.
   Untranslated keys fall back to English (typical real-world i18n shape). */
const T = {
  // Nav
  'nav.phones':       { en:'Phones', es:'Teléfonos', 'pt-br':'Celulares', pt:'Telemóveis', fr:'Téléphones', de:'Smartphones', it:'Telefoni', nl:'Telefoons', pl:'Telefony', sv:'Telefoner', fi:'Puhelimet', el:'Τηλέφωνα', tr:'Telefonlar', ru:'Телефоны', uk:'Телефони', ar:'الهواتف', fa:'گوشی‌ها', he:'טלפונים', hi:'फ़ोन', bn:'ফোন', ta:'மொபைல்கள்', ur:'فون', id:'Ponsel', ms:'Telefon', vi:'Điện thoại', th:'มือถือ', fil:'Mga Telepono', 'zh-cn':'手机', 'zh-tw':'手機', ja:'スマートフォン', ko:'스마트폰' },
  'nav.compare':      { en:'Compare', es:'Comparar', 'pt-br':'Comparar', pt:'Comparar', fr:'Comparer', de:'Vergleichen', it:'Confronta', nl:'Vergelijken', pl:'Porównaj', sv:'Jämför', fi:'Vertaa', el:'Σύγκριση', tr:'Karşılaştır', ru:'Сравнить', uk:'Порівняти', ar:'قارن', fa:'مقایسه', he:'השוואה', hi:'तुलना', bn:'তুলনা', ta:'ஒப்பிடு', ur:'موازنہ', id:'Bandingkan', ms:'Bandingkan', vi:'So sánh', th:'เปรียบเทียบ', fil:'Ihambing', 'zh-cn':'对比', 'zh-tw':'比較', ja:'比較', ko:'비교' },
  'nav.best':         { en:'Best Phones', es:'Mejores', 'pt-br':'Melhores', pt:'Melhores', fr:'Meilleurs', de:'Beste', it:'Migliori', nl:'Beste', pl:'Najlepsze', sv:'Bästa', fi:'Parhaat', el:'Καλύτερα', tr:'En İyiler', ru:'Лучшие', uk:'Найкращі', ar:'الأفضل', fa:'بهترین‌ها', he:'הטובים ביותר', hi:'बेस्ट फ़ोन', bn:'সেরা', ta:'சிறந்தவை', ur:'بہترین', id:'Terbaik', ms:'Terbaik', vi:'Tốt nhất', th:'ดีที่สุด', fil:'Pinakamahusay', 'zh-cn':'最佳手机', 'zh-tw':'最佳手機', ja:'ベスト', ko:'베스트' },
  'nav.brands':       { en:'Brands', es:'Marcas', 'pt-br':'Marcas', pt:'Marcas', fr:'Marques', de:'Marken', it:'Marche', nl:'Merken', pl:'Marki', sv:'Märken', fi:'Brändit', el:'Μάρκες', tr:'Markalar', ru:'Бренды', uk:'Бренди', ar:'العلامات', fa:'برندها', he:'מותגים', hi:'ब्रांड', bn:'ব্র্যান্ড', ta:'பிராண்டுகள்', ur:'برانڈز', id:'Merek', ms:'Jenama', vi:'Thương hiệu', th:'แบรนด์', fil:'Mga Brand', 'zh-cn':'品牌', 'zh-tw':'品牌', ja:'ブランド', ko:'브랜드' },
  'nav.news':         { en:'News', es:'Noticias', 'pt-br':'Notícias', pt:'Notícias', fr:'Actualités', de:'News', it:'Notizie', nl:'Nieuws', pl:'Wiadomości', sv:'Nyheter', fi:'Uutiset', el:'Νέα', tr:'Haberler', ru:'Новости', uk:'Новини', ar:'الأخبار', fa:'اخبار', he:'חדשות', hi:'समाचार', bn:'খবর', ta:'செய்திகள்', ur:'خبریں', id:'Berita', ms:'Berita', vi:'Tin tức', th:'ข่าว', fil:'Balita', 'zh-cn':'资讯', 'zh-tw':'新聞', ja:'ニュース', ko:'뉴스' },
  'nav.signin':       { en:'Sign in', es:'Acceder', 'pt-br':'Entrar', pt:'Entrar', fr:'Se connecter', de:'Anmelden', it:'Accedi', nl:'Inloggen', pl:'Zaloguj', sv:'Logga in', fi:'Kirjaudu', el:'Σύνδεση', tr:'Giriş', ru:'Войти', uk:'Увійти', ar:'تسجيل الدخول', fa:'ورود', he:'התחבר', hi:'साइन इन', bn:'সাইন ইন', ta:'உள்நுழை', ur:'سائن ان', id:'Masuk', ms:'Log masuk', vi:'Đăng nhập', th:'ลงชื่อเข้าใช้', fil:'Mag-sign in', 'zh-cn':'登录', 'zh-tw':'登入', ja:'ログイン', ko:'로그인' },

  // Hero title (two lines)
  'hero.title1':      { en:'Phone specs,', es:'Especificaciones,', 'pt-br':'Specs de celular,', pt:'Specs do telemóvel,', fr:'Fiches techniques,', de:'Smartphone-Specs,', it:'Specifiche,', nl:'Telefoon-specs,', pl:'Specyfikacje,', sv:'Telefonspecs,', fi:'Puhelinten tiedot,', el:'Προδιαγραφές,', tr:'Telefon özellikleri,', ru:'Характеристики,', uk:'Характеристики,', ar:'مواصفات الهواتف،', fa:'مشخصات گوشی،', he:'מפרטי טלפונים,', hi:'फ़ोन स्पेक्स,', bn:'ফোন স্পেক্স,', ta:'மொபைல் விவரங்கள்,', ur:'فون اسپیکس،', id:'Spesifikasi ponsel,', ms:'Spesifikasi telefon,', vi:'Thông số điện thoại,', th:'สเปคมือถือ,', fil:'Mga specs ng telepono,', 'zh-cn':'手机参数，', 'zh-tw':'手機規格，', ja:'スマホのスペック、', ko:'스마트폰 스펙,' },
  'hero.title2':      { en:'in focus.', es:'enfocadas.', 'pt-br':'em foco.', pt:'em foco.', fr:'en focus.', de:'im Fokus.', it:'a fuoco.', nl:'in beeld.', pl:'w skupieniu.', sv:'i fokus.', fi:'tarkennettuna.', el:'στο επίκεντρο.', tr:'odakta.', ru:'в фокусе.', uk:'у фокусі.', ar:'بوضوح.', fa:'با وضوح.', he:'בפוקוס.', hi:'फ़ोकस में.', bn:'ফোকাসে।', ta:'கூர்மையாக.', ur:'فوکس میں۔', id:'jelas.', ms:'tepat.', vi:'rõ nét.', th:'ชัดเจน.', fil:'malinaw.', 'zh-cn':'一目了然。', 'zh-tw':'一目了然。', ja:'明快に。', ko:'선명하게.' },
  'hero.subtitle':    { en:'The eagle-eyed database of every phone worth knowing — with AI verdicts that tell you which one to buy.', es:'La base de datos con vista de águila de cada teléfono que importa — con veredictos de IA que te dicen cuál comprar.', 'pt-br':'O banco de dados com olhar de águia de cada celular que importa — com veredictos de IA dizendo qual comprar.', pt:'A base de dados com olhar de águia de cada telemóvel que importa — com veredictos de IA a dizer-te qual comprar.', fr:'La base de données à l\'œil d\'aigle de chaque téléphone qui compte — avec des verdicts IA qui vous disent lequel acheter.', de:'Die Adleraugen-Datenbank für jedes wichtige Smartphone — mit KI-Verdikten, die dir sagen, welches du kaufen sollst.', it:'Il database dall\'occhio d\'aquila di ogni telefono che conta — con verdetti AI che ti dicono quale comprare.', nl:'De arendsoog-database van elke telefoon die ertoe doet — met AI-oordelen die je vertellen welke te kopen.', pl:'Sokoli wzrok w bazie danych każdego ważnego telefonu — z werdyktami AI mówiącymi, który kupić.', sv:'Örnögat över varje telefon värd att känna till — med AI-domar som säger vilken du ska köpa.', fi:'Kotka-silmäinen tietokanta jokaisesta tärkeästä puhelimesta — tekoälyn arviot kertovat, mikä kannattaa ostaa.', el:'Η βάση δεδομένων με μάτι αετού για κάθε τηλέφωνο που αξίζει — με ετυμηγορίες AI που σας λένε ποιο να αγοράσετε.', tr:'Tanımanız gereken her telefonun kartal gözü veritabanı — hangisini alacağınızı söyleyen AI kararlarıyla.', ru:'База данных с орлиным взглядом для каждого важного телефона — с вердиктами ИИ, которые скажут, какой купить.', uk:'База даних з орлиним зором про кожен важливий телефон — з вердиктами ШІ, які скажуть, який купити.', ar:'قاعدة بيانات بعين الصقر لكل هاتف يستحق المعرفة — مع أحكام الذكاء الاصطناعي التي تخبرك بأيها تشتري.', fa:'پایگاه داده‌ای با چشم عقاب از هر گوشی ارزشمند — همراه با احکام هوش مصنوعی که می‌گویند کدام را بخرید.', he:'מסד הנתונים בעין הנשר של כל טלפון שכדאי להכיר — עם ערך AI שאומר לך מה לקנות.', hi:'हर ज़रूरी फ़ोन का बाज़-नज़र डेटाबेस — AI निर्णयों के साथ जो बताते हैं कौन-सा खरीदें।', bn:'প্রতিটি গুরুত্বপূর্ণ ফোনের ঈগল-চোখ ডাটাবেস — কোনটি কিনবেন তা AI বলবে।', ta:'அறிய வேண்டிய ஒவ்வொரு மொபைலின் கழுகுக் கண் தரவுத்தளம் — எதை வாங்க வேண்டும் என்று AI கூறும்.', ur:'ہر اہم فون کا عقاب نگاہ ڈیٹابیس — AI فیصلے جو بتاتے ہیں کون سا خریدیں۔', id:'Database mata elang dari setiap ponsel yang patut diketahui — dengan vonis AI yang memberitahu Anda mana yang harus dibeli.', ms:'Pangkalan data mata helang setiap telefon yang penting — dengan keputusan AI yang memberitahu anda mana satu untuk dibeli.', vi:'Cơ sở dữ liệu mắt đại bàng về mọi điện thoại đáng biết — với phán quyết AI cho bạn biết nên mua chiếc nào.', th:'ฐานข้อมูลสายตาพญาอินทรีของทุกมือถือที่ควรรู้จัก — พร้อมคำตัดสิน AI ที่บอกว่าควรซื้อรุ่นไหน', fil:'Ang eagle-eyed na database ng bawat teleponong dapat malaman — may AI verdicts na nagsasabi kung alin ang bilhin.', 'zh-cn':'值得了解的每一款手机，鹰眼数据库一网打尽——AI 直接告诉你买哪台。', 'zh-tw':'值得認識的每款手機，鷹眼資料庫全收錄——AI 直接告訴你買哪台。', ja:'知っておくべきすべてのスマートフォンを鷹の目で網羅したデータベース — AIがどれを買うべきか教えます。', ko:'알아야 할 모든 스마트폰을 매의 눈으로 담은 데이터베이스 — AI가 어떤 걸 사야 할지 알려드립니다.' },

  // Hero search
  'hero.search':      { en:'Search any phone… e.g., Galaxy S25 Ultra', es:'Busca cualquier teléfono… ej., Galaxy S25 Ultra', 'pt-br':'Busque qualquer celular… ex., Galaxy S25 Ultra', pt:'Pesquisar qualquer telemóvel… ex., Galaxy S25 Ultra', fr:'Rechercher un téléphone… ex. Galaxy S25 Ultra', de:'Smartphone suchen… z. B. Galaxy S25 Ultra', it:'Cerca un telefono… es., Galaxy S25 Ultra', nl:'Zoek elke telefoon… bv. Galaxy S25 Ultra', pl:'Szukaj telefonu… np. Galaxy S25 Ultra', sv:'Sök telefon… t.ex. Galaxy S25 Ultra', fi:'Etsi puhelinta… esim. Galaxy S25 Ultra', el:'Αναζητήστε τηλέφωνο… π.χ. Galaxy S25 Ultra', tr:'Telefon ara… örn., Galaxy S25 Ultra', ru:'Найти телефон… напр., Galaxy S25 Ultra', uk:'Знайти телефон… напр., Galaxy S25 Ultra', ar:'ابحث عن أي هاتف… مثل Galaxy S25 Ultra', fa:'هر گوشی را جستجو کنید… مثلاً Galaxy S25 Ultra', he:'חפש כל טלפון… לדוגמה, Galaxy S25 Ultra', hi:'कोई भी फ़ोन खोजें… जैसे, Galaxy S25 Ultra', bn:'যেকোনো ফোন খুঁজুন… যেমন, Galaxy S25 Ultra', ta:'எந்த மொபைலையும் தேடவும்… எ.கா., Galaxy S25 Ultra', ur:'کوئی بھی فون تلاش کریں… مثلاً Galaxy S25 Ultra', id:'Cari ponsel apa saja… mis. Galaxy S25 Ultra', ms:'Cari mana-mana telefon… cth., Galaxy S25 Ultra', vi:'Tìm điện thoại bất kỳ… vd., Galaxy S25 Ultra', th:'ค้นหามือถือ… เช่น Galaxy S25 Ultra', fil:'Maghanap ng telepono… hal., Galaxy S25 Ultra', 'zh-cn':'搜索任意手机…例如 Galaxy S25 Ultra', 'zh-tw':'搜尋任何手機…例如 Galaxy S25 Ultra', ja:'スマートフォンを検索… 例：Galaxy S25 Ultra', ko:'아무 스마트폰이나 검색… 예: Galaxy S25 Ultra' },
  'hero.searchBtn':   { en:'Search', es:'Buscar', 'pt-br':'Buscar', pt:'Pesquisar', fr:'Rechercher', de:'Suchen', it:'Cerca', nl:'Zoeken', pl:'Szukaj', sv:'Sök', fi:'Hae', el:'Αναζήτηση', tr:'Ara', ru:'Найти', uk:'Шукати', ar:'بحث', fa:'جستجو', he:'חפש', hi:'खोजें', bn:'খুঁজুন', ta:'தேடு', ur:'تلاش', id:'Cari', ms:'Cari', vi:'Tìm', th:'ค้นหา', fil:'Hanapin', 'zh-cn':'搜索', 'zh-tw':'搜尋', ja:'検索', ko:'검색' },
  'hero.orCompare':   { en:'or compare two phones', es:'o compara dos teléfonos', 'pt-br':'ou compare dois celulares', pt:'ou compare dois telemóveis', fr:'ou comparer deux téléphones', de:'oder vergleiche zwei Smartphones', it:'o confronta due telefoni', nl:'of vergelijk twee telefoons', pl:'lub porównaj dwa telefony', sv:'eller jämför två telefoner', fi:'tai vertaa kahta puhelinta', el:'ή σύγκρινε δύο τηλέφωνα', tr:'veya iki telefonu karşılaştır', ru:'или сравните два телефона', uk:'або порівняйте два телефони', ar:'أو قارن بين هاتفين', fa:'یا دو گوشی را مقایسه کنید', he:'או השווה שני טלפונים', hi:'या दो फ़ोन की तुलना करें', bn:'অথবা দুটি ফোন তুলনা করুন', ta:'அல்லது இரண்டு மொபைல்களை ஒப்பிடவும்', ur:'یا دو فون موازنہ کریں', id:'atau bandingkan dua ponsel', ms:'atau bandingkan dua telefon', vi:'hoặc so sánh hai điện thoại', th:'หรือเปรียบเทียบสองมือถือ', fil:'o ihambing ang dalawang telepono', 'zh-cn':'或者对比两款手机', 'zh-tw':'或比較兩款手機', ja:'または2機種を比較', ko:'또는 두 스마트폰 비교' },

  // Trust microcopy
  'hero.trust.phones': { en:'phones', es:'teléfonos', 'pt-br':'celulares', pt:'telemóveis', fr:'téléphones', de:'Smartphones', it:'telefoni', nl:'telefoons', pl:'telefonów', sv:'telefoner', fi:'puhelinta', el:'τηλέφωνα', tr:'telefon', ru:'телефонов', uk:'телефонів', ar:'هاتف', fa:'گوشی', he:'טלפונים', hi:'फ़ोन', bn:'ফোন', ta:'மொபைல்கள்', ur:'فون', id:'ponsel', ms:'telefon', vi:'điện thoại', th:'มือถือ', fil:'mga telepono', 'zh-cn':'款手机', 'zh-tw':'款手機', ja:'機種', ko:'대' },
  'hero.trust.brands': { en:'brands', es:'marcas', 'pt-br':'marcas', pt:'marcas', fr:'marques', de:'Marken', it:'marche', nl:'merken', pl:'marek', sv:'märken', fi:'merkkiä', el:'μάρκες', tr:'marka', ru:'брендов', uk:'брендів', ar:'علامة', fa:'برند', he:'מותגים', hi:'ब्रांड', bn:'ব্র্যান্ড', ta:'பிராண்டுகள்', ur:'برانڈز', id:'merek', ms:'jenama', vi:'thương hiệu', th:'แบรนด์', fil:'mga brand', 'zh-cn':'个品牌', 'zh-tw':'個品牌', ja:'ブランド', ko:'개 브랜드' },
  'hero.trust.ai':     { en:'AI-verified specs', es:'specs verificadas por IA', 'pt-br':'specs verificadas por IA', pt:'specs verificadas por IA', fr:'specs vérifiées par IA', de:'KI-geprüfte Specs', it:'specifiche verificate da IA', nl:'door AI geverifieerd', pl:'spec. zweryfikowane przez AI', sv:'AI-verifierade specs', fi:'tekoälyn vahvistamat tiedot', el:'specs επαληθευμένες με AI', tr:'AI doğrulamalı özellikler', ru:'ИИ-проверенные характеристики', uk:'специфікації, перевірені ШІ', ar:'مواصفات موثّقة بالذكاء الاصطناعي', fa:'مشخصات تأیید‌شده با AI', he:'מפרטים מאומתי AI', hi:'AI से सत्यापित स्पेक्स', bn:'AI-যাচাইকৃত স্পেক্স', ta:'AI சரிபார்க்கப்பட்ட விவரம்', ur:'AI تصدیق شدہ اسپیکس', id:'spek terverifikasi AI', ms:'spek disahkan AI', vi:'thông số được AI xác minh', th:'สเปคที่ AI ตรวจสอบแล้ว', fil:'specs na AI-verified', 'zh-cn':'AI 已核验参数', 'zh-tw':'AI 已驗證規格', ja:'AI検証済みスペック', ko:'AI 검증 사양' },
  'hero.trust.daily':  { en:'Updated daily', es:'Actualizado a diario', 'pt-br':'Atualizado diariamente', pt:'Atualizado diariamente', fr:'Mis à jour chaque jour', de:'Täglich aktualisiert', it:'Aggiornato ogni giorno', nl:'Dagelijks bijgewerkt', pl:'Aktualizowane codziennie', sv:'Uppdateras dagligen', fi:'Päivitetään päivittäin', el:'Ενημερώνεται καθημερινά', tr:'Günlük güncellenir', ru:'Обновляется ежедневно', uk:'Оновлюється щодня', ar:'يُحدّث يوميًا', fa:'به‌روز رسانی روزانه', he:'מתעדכן יומית', hi:'रोज़ अपडेट', bn:'প্রতিদিন আপডেট', ta:'தினமும் புதுப்பிக்கப்படுகிறது', ur:'روزانہ اپ ڈیٹ', id:'Diperbarui setiap hari', ms:'Dikemas kini harian', vi:'Cập nhật mỗi ngày', th:'อัปเดตทุกวัน', fil:'Araw-araw na update', 'zh-cn':'每日更新', 'zh-tw':'每日更新', ja:'毎日更新', ko:'매일 업데이트' },

  // Sticky CTA
  'cta.compact':       { en:'Compare any two phones', es:'Compara dos teléfonos', 'pt-br':'Compare dois celulares', pt:'Compare dois telemóveis', fr:'Comparer deux téléphones', de:'Zwei Smartphones vergleichen', it:'Confronta due telefoni', nl:'Twee telefoons vergelijken', pl:'Porównaj dwa telefony', sv:'Jämför två telefoner', fi:'Vertaa kahta puhelinta', el:'Σύγκρινε δύο τηλέφωνα', tr:'İki telefonu karşılaştır', ru:'Сравнить два телефона', uk:'Порівняти два телефони', ar:'قارن بين هاتفين', fa:'دو گوشی را مقایسه کنید', he:'השווה שני טלפונים', hi:'दो फ़ोनों की तुलना करें', bn:'যেকোনো দুটি ফোন তুলনা', ta:'எந்த இரண்டு மொபைல்களையும் ஒப்பிடவும்', ur:'کوئی دو فون موازنہ کریں', id:'Bandingkan dua ponsel', ms:'Bandingkan dua telefon', vi:'So sánh hai điện thoại bất kỳ', th:'เปรียบเทียบมือถือสองรุ่น', fil:'Ihambing ang dalawang telepono', 'zh-cn':'对比任意两款手机', 'zh-tw':'比較任意兩款手機', ja:'2機種を比較', ko:'두 스마트폰 비교' },
  'cta.go':            { en:'Compare', es:'Comparar', 'pt-br':'Comparar', pt:'Comparar', fr:'Comparer', de:'Vergleichen', it:'Confronta', nl:'Vergelijken', pl:'Porównaj', sv:'Jämför', fi:'Vertaa', el:'Σύγκριση', tr:'Karşılaştır', ru:'Сравнить', uk:'Порівняти', ar:'قارن', fa:'مقایسه', he:'השווה', hi:'तुलना', bn:'তুলনা', ta:'ஒப்பிடு', ur:'موازنہ', id:'Bandingkan', ms:'Bandingkan', vi:'So sánh', th:'เปรียบเทียบ', fil:'Ihambing', 'zh-cn':'对比', 'zh-tw':'比較', ja:'比較', ko:'비교' },

  // AI Verdict module
  'ai.eyebrow':        { en:'AI Verdict', es:'Veredicto IA', 'pt-br':'Veredicto IA', pt:'Veredicto IA', fr:'Verdict IA', de:'KI-Verdikt', it:'Verdetto IA', nl:'AI-oordeel', pl:'Werdykt AI', sv:'AI-dom', fi:'Tekoälyn tuomio', el:'Ετυμηγορία AI', tr:'AI Kararı', ru:'Вердикт ИИ', uk:'Вердикт ШІ', ar:'حكم الذكاء الاصطناعي', fa:'حکم هوش مصنوعی', he:'פסיקת AI', hi:'AI निर्णय', bn:'AI রায়', ta:'AI தீர்ப்பு', ur:'AI فیصلہ', id:'Vonis AI', ms:'Keputusan AI', vi:'Phán quyết AI', th:'คำตัดสิน AI', fil:'AI Verdict', 'zh-cn':'AI 判断', 'zh-tw':'AI 判決', ja:'AI判定', ko:'AI 판정' },
  'ai.heading':        { en:'Three verdicts, no fluff.', es:'Tres veredictos, sin relleno.', 'pt-br':'Três veredictos, sem enrolação.', pt:'Três veredictos, sem rodeios.', fr:'Trois verdicts, sans détour.', de:'Drei Verdikte, ohne Geschwafel.', it:'Tre verdetti, senza fronzoli.', nl:'Drie oordelen, geen omhaal.', pl:'Trzy werdykty, bez owijania.', sv:'Tre domar, inget fluff.', fi:'Kolme tuomiota, ei jaaritteluja.', el:'Τρεις ετυμηγορίες, χωρίς περιστροφές.', tr:'Üç karar, lafı dolandırmadan.', ru:'Три вердикта, без воды.', uk:'Три вердикти, без води.', ar:'ثلاثة أحكام، بلا حشو.', fa:'سه حکم، بدون حاشیه.', he:'שלוש פסיקות, בלי קשקושים.', hi:'तीन निर्णय, बिना लाग-लपेट।', bn:'তিনটি রায়, কোনো ফাঁকা কথা নয়।', ta:'மூன்று தீர்ப்புகள், சுற்றி வளைப்பு இல்லை.', ur:'تین فیصلے، کوئی فضولیات نہیں۔', id:'Tiga vonis, tanpa basa-basi.', ms:'Tiga keputusan, tanpa basa-basi.', vi:'Ba phán quyết, không vòng vo.', th:'สามคำตัดสิน ไม่มีน้ำ', fil:'Tatlong verdict, walang kayabangan.', 'zh-cn':'三个判断，绝不啰嗦。', 'zh-tw':'三個判決，絕不囉嗦。', ja:'3つの判定、無駄なし。', ko:'세 가지 판정, 군더더기 없이.' },

  // Modal
  'lang.title':       { en:'Choose your language', es:'Elige tu idioma', 'pt-br':'Escolha seu idioma', pt:'Escolha o seu idioma', fr:'Choisissez votre langue', de:'Wähle deine Sprache', it:'Scegli la tua lingua', nl:'Kies je taal', pl:'Wybierz język', sv:'Välj språk', fi:'Valitse kieli', el:'Επιλέξτε γλώσσα', tr:'Dilini seç', ru:'Выберите язык', uk:'Виберіть мову', ar:'اختر لغتك', fa:'زبان خود را انتخاب کنید', he:'בחר שפה', hi:'अपनी भाषा चुनें', bn:'আপনার ভাষা বাছুন', ta:'மொழியைத் தேர்ந்தெடுக்கவும்', ur:'اپنی زبان منتخب کریں', id:'Pilih bahasa Anda', ms:'Pilih bahasa anda', vi:'Chọn ngôn ngữ', th:'เลือกภาษา', fil:'Piliin ang iyong wika', 'zh-cn':'选择你的语言', 'zh-tw':'選擇你的語言', ja:'言語を選択', ko:'언어 선택' },
  'lang.subtitle':    { en:'30 languages — same data, same verdicts, real editorial voice.', es:'30 idiomas — mismos datos, mismos veredictos, voz editorial real.', 'pt-br':'30 idiomas — mesmos dados, mesmos veredictos, voz editorial real.', pt:'30 idiomas — mesmos dados, mesmos veredictos, voz editorial real.', fr:'30 langues — mêmes données, mêmes verdicts, ligne éditoriale réelle.', de:'30 Sprachen — gleiche Daten, gleiche Verdikte, echte redaktionelle Stimme.', it:'30 lingue — stessi dati, stessi verdetti, voce editoriale reale.', nl:'30 talen — zelfde data, zelfde oordelen, echte redactionele stem.', pl:'30 języków — te same dane, te same werdykty, prawdziwa redakcja.', sv:'30 språk — samma data, samma domar, äkta redaktionell röst.', fi:'30 kieltä — samat tiedot, samat tuomiot, aito toimituksellinen ääni.', el:'30 γλώσσες — ίδια δεδομένα, ίδιες ετυμηγορίες, πραγματική συντακτική φωνή.', tr:'30 dil — aynı veri, aynı kararlar, gerçek editoryal ses.', ru:'30 языков — одни данные, одни вердикты, реальная редакция.', uk:'30 мов — ті самі дані, ті самі вердикти, справжня редакція.', ar:'30 لغة — نفس البيانات، نفس الأحكام، صوت تحريري حقيقي.', fa:'۳۰ زبان — یک داده، یک حکم، صدای تحریریه واقعی.', he:'30 שפות — אותם נתונים, אותן פסיקות, קול עריכה אמיתי.', hi:'30 भाषाएँ — वही डेटा, वही निर्णय, असली संपादकीय आवाज़।', bn:'৩০টি ভাষা — একই ডেটা, একই রায়, প্রকৃত সম্পাদকীয় কণ্ঠ।', ta:'30 மொழிகள் — அதே தரவு, அதே தீர்ப்புகள், உண்மையான ஆசிரியர் குரல்.', ur:'30 زبانیں — وہی ڈیٹا، وہی فیصلے، اصلی ادارتی آواز۔', id:'30 bahasa — data sama, vonis sama, suara editorial nyata.', ms:'30 bahasa — data sama, keputusan sama, suara editorial sebenar.', vi:'30 ngôn ngữ — cùng dữ liệu, cùng phán quyết, giọng biên tập thực sự.', th:'30 ภาษา — ข้อมูลเดียวกัน คำตัดสินเดียวกัน เสียงบรรณาธิการจริง', fil:'30 wika — parehong data, parehong verdicts, totoong editorial voice.', 'zh-cn':'30 种语言 — 同一数据、同一判断、真正的编辑声音。', 'zh-tw':'30 種語言 — 相同數據、相同判決、真實的編輯聲音。', ja:'30言語 — 同じデータ、同じ判定、本物の編集ボイス。', ko:'30개 언어 — 같은 데이터, 같은 판정, 진짜 편집의 목소리.' },
  'lang.search':      { en:'Search 30 languages…', es:'Busca 30 idiomas…', 'pt-br':'Pesquisar 30 idiomas…', pt:'Pesquisar 30 idiomas…', fr:'Rechercher parmi 30 langues…', de:'30 Sprachen durchsuchen…', it:'Cerca tra 30 lingue…', nl:'Zoek tussen 30 talen…', pl:'Szukaj wśród 30 języków…', sv:'Sök bland 30 språk…', fi:'Hae 30 kielestä…', el:'Αναζητήστε 30 γλώσσες…', tr:'30 dil arasında ara…', ru:'Поиск среди 30 языков…', uk:'Пошук серед 30 мов…', ar:'ابحث في 30 لغة…', fa:'جستجو در ۳۰ زبان…', he:'חיפוש מתוך 30 שפות…', hi:'30 भाषाओं में खोजें…', bn:'৩০টি ভাষায় খুঁজুন…', ta:'30 மொழிகளில் தேடவும்…', ur:'30 زبانوں میں تلاش…', id:'Cari di 30 bahasa…', ms:'Cari dalam 30 bahasa…', vi:'Tìm trong 30 ngôn ngữ…', th:'ค้นหา 30 ภาษา…', fil:'Maghanap sa 30 wika…', 'zh-cn':'在 30 种语言中搜索…', 'zh-tw':'在 30 種語言中搜尋…', ja:'30言語から検索…', ko:'30개 언어 검색…' },
  'lang.current':     { en:'Current', es:'Actual', 'pt-br':'Atual', pt:'Atual', fr:'Actuel', de:'Aktuell', it:'Attuale', nl:'Huidig', pl:'Bieżący', sv:'Nuvarande', fi:'Nykyinen', el:'Τρέχουσα', tr:'Mevcut', ru:'Текущий', uk:'Поточна', ar:'الحالية', fa:'فعلی', he:'נוכחי', hi:'वर्तमान', bn:'বর্তমান', ta:'தற்போது', ur:'موجودہ', id:'Saat ini', ms:'Semasa', vi:'Hiện tại', th:'ปัจจุบัน', fil:'Kasalukuyan', 'zh-cn':'当前', 'zh-tw':'目前', ja:'現在', ko:'현재' },
  'lang.coverage':    { en:'translated', es:'traducido', 'pt-br':'traduzido', pt:'traduzido', fr:'traduit', de:'übersetzt', it:'tradotto', nl:'vertaald', pl:'przetłumaczone', sv:'översatt', fi:'käännetty', el:'μεταφρασμένο', tr:'çevrildi', ru:'переведено', uk:'перекладено', ar:'مترجم', fa:'ترجمه‌شده', he:'מתורגם', hi:'अनूदित', bn:'অনূদিত', ta:'மொழிபெயர்ப்பு', ur:'ترجمہ شدہ', id:'diterjemahkan', ms:'diterjemahkan', vi:'đã dịch', th:'แปลแล้ว', fil:'naisalin', 'zh-cn':'已翻译', 'zh-tw':'已翻譯', ja:'翻訳済み', ko:'번역됨' },
  'lang.allLanguages':{ en:'Available in 30 languages', es:'Disponible en 30 idiomas', 'pt-br':'Disponível em 30 idiomas', pt:'Disponível em 30 idiomas', fr:'Disponible en 30 langues', de:'In 30 Sprachen verfügbar', it:'Disponibile in 30 lingue', nl:'Beschikbaar in 30 talen', pl:'Dostępne w 30 językach', sv:'Tillgängligt på 30 språk', fi:'Saatavilla 30 kielellä', el:'Διαθέσιμο σε 30 γλώσσες', tr:'30 dilde mevcut', ru:'Доступно на 30 языках', uk:'Доступно 30 мовами', ar:'متاح بـ 30 لغة', fa:'در ۳۰ زبان موجود است', he:'זמין ב-30 שפות', hi:'30 भाषाओं में उपलब्ध', bn:'৩০টি ভাষায় উপলব্ধ', ta:'30 மொழிகளில் கிடைக்கிறது', ur:'30 زبانوں میں دستیاب', id:'Tersedia dalam 30 bahasa', ms:'Tersedia dalam 30 bahasa', vi:'Có sẵn ở 30 ngôn ngữ', th:'มีให้บริการใน 30 ภาษา', fil:'Available sa 30 wika', 'zh-cn':'支持 30 种语言', 'zh-tw':'支援 30 種語言', ja:'30言語対応', ko:'30개 언어 지원' },
};

/* ---- Context ---- */
const LangContext = createContext({ lang: 'en', setLang: () => {}, t: (k) => k });

const LangProvider = ({ children }) => {
  const [lang, setLang] = useState('en');

  useEffect(() => {
    const langDef = LANGUAGES.find((l) => l.code === lang);
    document.documentElement.setAttribute('lang', lang);
    document.documentElement.setAttribute('dir', langDef?.rtl ? 'rtl' : 'ltr');
  }, [lang]);

  const t = (key) => {
    const entry = T[key];
    if (!entry) return key;
    return entry[lang] || entry.en || key;
  };

  return (
    <LangContext.Provider value={{ lang, setLang, t, langs: LANGUAGES }}>
      {children}
    </LangContext.Provider>
  );
};

const useLang = () => useContext(LangContext);

/* ---- Language Modal ---- */
const LangModal = ({ open, onClose }) => {
  const { lang, setLang } = useLang();
  const [query, setQuery] = useState('');

  useEffect(() => {
    if (open) setQuery('');
  }, [open]);

  useEffect(() => {
    if (!open) return;
    const onKey = (e) => { if (e.key === 'Escape') onClose(); };
    window.addEventListener('keydown', onKey);
    return () => window.removeEventListener('keydown', onKey);
  }, [open, onClose]);

  if (!open) return null;

  const tt = (k) => (T[k] && T[k][lang]) || T[k]?.en || k;
  const q = query.trim().toLowerCase();
  const matches = LANGUAGES.filter((l) => {
    if (!q) return true;
    return l.name.toLowerCase().includes(q) || l.native.toLowerCase().includes(q) || l.code.includes(q) || l.region.toLowerCase().includes(q);
  });

  // Group by region, preserving global order
  const groups = {};
  matches.forEach((l) => {
    if (!groups[l.region]) groups[l.region] = [];
    groups[l.region].push(l);
  });
  const regions = ['Global', 'Americas', 'Europe', 'MENA', 'South Asia', 'SEA', 'East Asia'].filter((r) => groups[r]);

  return (
    <div className="fixed inset-0 z-[100] flex items-center justify-center p-4" role="dialog" aria-modal="true">
      <div className="absolute inset-0 bg-ink/40 dark:bg-d-bg/70 backdrop-blur-sm" onClick={onClose} />
      <div className="relative w-full max-w-3xl max-h-[88vh] rounded-2xl bg-paper dark:bg-d-surface border border-line dark:border-d-border shadow-2xl flex flex-col overflow-hidden">
        {/* Header */}
        <div className="px-6 pt-6 pb-4 border-b border-line dark:border-d-border">
          <div className="flex items-start justify-between gap-4">
            <div>
              <div className="flex items-center gap-2 mb-1.5">
                <IconGlobe size={14} className="text-amber-brand dark:text-amber-warm" />
                <span className="text-[11px] font-mono uppercase tracking-[0.16em] text-amber-brand dark:text-amber-warm">{LANGUAGES.length} languages</span>
              </div>
              <h2 className="font-display font-bold tracking-tighter2 text-[24px] text-ink dark:text-white leading-tight">
                {tt('lang.title')}
              </h2>
              <p className="mt-1 text-[13px] text-ink-soft dark:text-d-muted max-w-md">
                {tt('lang.subtitle')}
              </p>
            </div>
            <button
              onClick={onClose}
              aria-label="Close"
              className="shrink-0 p-2 rounded-lg text-ink-soft dark:text-d-muted hover:text-ink dark:hover:text-white hover:bg-paper-soft dark:hover:bg-d-bg"
            >
              <IconX size={16} />
            </button>
          </div>

          {/* Search */}
          <div className="mt-4 flex items-center gap-2 rounded-xl border border-line dark:border-d-border bg-paper-soft dark:bg-d-bg px-3 py-2.5">
            <IconSearch size={15} className="text-ink-soft dark:text-d-muted" />
            <input
              autoFocus
              placeholder={tt('lang.search')}
              value={query}
              onChange={(e) => setQuery(e.target.value)}
              className="flex-1 min-w-0 bg-transparent text-[14px] outline-none placeholder:text-ink-soft/60 dark:placeholder:text-d-muted/60"
            />
            <kbd className="hidden sm:inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-ink-soft dark:text-d-muted bg-paper dark:bg-d-surface border border-line dark:border-d-border">esc</kbd>
          </div>
        </div>

        {/* Body */}
        <div className="flex-1 overflow-y-auto px-6 py-5">
          {regions.length === 0 && (
            <div className="text-center py-12 text-[13px] text-ink-soft dark:text-d-muted">
              No languages match "{query}"
            </div>
          )}
          {regions.map((region) => (
            <div key={region} className="mb-6 last:mb-0">
              <div className="text-[10px] font-mono uppercase tracking-[0.16em] text-ink-soft dark:text-d-muted mb-3">{region}</div>
              <div className="grid grid-cols-1 sm:grid-cols-2 gap-1.5">
                {groups[region].map((l) => {
                  const active = lang === l.code;
                  return (
                    <button
                      key={l.code}
                      onClick={() => { setLang(l.code); onClose(); }}
                      className={`flex items-center gap-3 px-3 py-2.5 rounded-lg border text-left transition group ${
                        active
                          ? 'border-amber-brand dark:border-amber-warm bg-amber-brand/[0.06] dark:bg-amber-warm/[0.06]'
                          : 'border-transparent hover:bg-paper-soft dark:hover:bg-d-bg'
                      }`}
                    >
                      <span className={`flex-shrink-0 w-9 text-[10px] font-mono uppercase tracking-wider ${active ? 'text-amber-brand dark:text-amber-warm' : 'text-ink-soft dark:text-d-muted'}`}>
                        {l.code.toUpperCase()}
                      </span>
                      <div className="flex-1 min-w-0">
                        <div className={`text-[14px] font-medium truncate ${active ? 'text-ink dark:text-white' : 'text-ink dark:text-white'}`}>
                          {l.native}
                        </div>
                        <div className="text-[11px] text-ink-soft dark:text-d-muted truncate">{l.name}</div>
                      </div>
                      <div className="flex items-center gap-2 shrink-0">
                        <div className="hidden sm:flex flex-col items-end">
                          <div className="num text-[10px] text-ink-soft dark:text-d-muted">{l.coverage}%</div>
                          <div className="w-14 h-1 rounded-full bg-line dark:bg-d-border overflow-hidden">
                            <div
                              className={l.coverage >= 95 ? 'h-full bg-win' : l.coverage >= 90 ? 'h-full bg-amber-brand dark:bg-amber-warm' : 'h-full bg-ink-soft/50 dark:bg-d-muted/50'}
                              style={{ width: `${l.coverage}%` }}
                            />
                          </div>
                        </div>
                        {l.rtl && (
                          <span className="text-[9px] font-mono uppercase tracking-wider text-ink-soft dark:text-d-muted bg-paper-soft dark:bg-d-bg border border-line dark:border-d-border rounded px-1 py-0.5">RTL</span>
                        )}
                        {active && <IconCheck size={14} className="text-amber-brand dark:text-amber-warm" />}
                      </div>
                    </button>
                  );
                })}
              </div>
            </div>
          ))}
        </div>

        {/* Footer */}
        <div className="px-6 py-3.5 border-t border-line dark:border-d-border bg-paper-soft/50 dark:bg-d-bg/50 flex items-center justify-between text-[11px] font-mono uppercase tracking-wider text-ink-soft dark:text-d-muted">
          <div className="flex items-center gap-3">
            <span className="inline-flex items-center gap-1.5"><span className="h-1.5 w-1.5 rounded-full bg-win" /> ≥ 95% {tt('lang.coverage')}</span>
            <span className="inline-flex items-center gap-1.5"><span className="h-1.5 w-1.5 rounded-full bg-amber-brand dark:bg-amber-warm" /> 90–94%</span>
            <span className="inline-flex items-center gap-1.5"><span className="h-1.5 w-1.5 rounded-full bg-ink-soft/50 dark:bg-d-muted/50" /> &lt; 90%</span>
          </div>
          <span>↑↓ navigate · ⏎ select · esc close</span>
        </div>
      </div>
    </div>
  );
};

Object.assign(window, { LANGUAGES, T, LangContext, LangProvider, useLang, LangModal });
