// i18n.jsx - VaultCova localization engine (exported to window)
// Tiered i18n: chrome + primary screens are fully keyed below.
// Anything not keyed falls back gracefully to English, then to a humanised key,
// so an un-translated deep view never looks broken - it just stays in English.
//
// NOTE on copy quality: the en/pcm strings are authored; yo/ha/ig are good-faith
// machine-assisted translations and should get a native-speaker pass before launch.

const VC_LANGS = [
  { id: "en", label: "English", native: "English", locale: "en-NG" },
  { id: "pcm", label: "Pidgin", native: "Naijá Pidgin", locale: "en-NG" },
  { id: "yo", label: "Yorùbá", native: "Yorùbá", locale: "yo-NG" },
  { id: "ha", label: "Hausa", native: "Hausa", locale: "ha-NG" },
  { id: "ig", label: "Igbo", native: "Igbo", locale: "ig-NG" },
];

// ---------------------------------------------------------------------------
// STRINGS - keyed by language. English is the source of truth & fallback.
// Brand nouns (VaultCova, Cova, VaultLog, Cova Insight, VaultRewards) are NOT
// translated. {name} style placeholders are filled by t(key, { name }).
// ---------------------------------------------------------------------------
const STRINGS = {
  en: {
    // ---- chrome: rail nav ----
    "nav.home": "Home",
    "nav.vaultlog": "VaultLog",
    "nav.insure": "Insure",
    "nav.claims": "Claims",
    "nav.insight": "Insight",
    "nav.rewards": "Rewards",
    "nav.settings": "Settings",
    "nav.admin": "Admin",
    // ---- chrome: top bar ----
    "title.dashboard": "Dashboard",
    "title.vaultlog": "VaultLog",
    "title.insure": "Insure",
    "title.claims": "Claims",
    "title.insight": "Cova Insight",
    "title.rewards": "VaultRewards",
    "title.settings": "Settings",
    "topbar.personalVault": "Personal vault",
    // ---- chrome: Cova dock ----
    "dock.cova": "Cova",
    "dock.online": "● Online - assessing in real time",
    "dock.copilot": "COVA · CO-PILOT",
    "dock.placeholder": "Tell Cova anything…",
    "chat.placeholder": "Describe what you own, or ask anything…",
    "chat.listening": "Listening… speak now",
    "chat.voiceUnsupported": "Voice input isn't supported in this browser",
    "chat.voiceOn": "Voice replies on",
    "chat.voiceOff": "Voice replies off",
    // ---- chrome: mobile ----
    "mobile.home": "Home",
    "mobile.vault": "Vault",
    "mobile.claims": "Claims",
    "mobile.more": "More",
    "mobile.askCova": "Ask Cova",
    "mobile.adminConsole": "Admin console",
    "mobile.lightMode": "Light mode",
    "mobile.darkMode": "Dark mode",
    "mobile.personal": "Personal",
    "mobile.business": "Business",
    // ---- common ----
    "common.askCova": "Ask Cova",
    "common.save": "Save changes",
    "common.cancel": "Cancel",
    "common.back": "Back",
    "common.continue": "Continue",
    "common.search": "Search assets…",
    "common.all": "All",
    // ---- status badges ----
    "status.insured": "Insured",
    "status.partial": "Underinsured",
    "status.lapsing": "Lapsing",
    "status.uninsured": "Uninsured",
    // ---- dashboard ----
    "dash.greeting": "Good afternoon, {name} 👋",
    "dash.greeting.morning": "Good morning, {name} 👋",
    "dash.greeting.evening": "Good evening, {name} 👋",
    "dash.titleBiz": "Your risk, at a glance",
    "dash.titlePersonal": "Your assets, at a glance",
    "dash.kpi.activePolicies": "Active policies",
    "dash.kpi.sumInsured": "Total sum insured",
    "dash.kpi.gap": "Coverage gap",
    "dash.kpi.openClaims": "Open claims",
    "dash.coverageHealth": "Coverage health",
    "dash.openVaultlog": "Open VaultLog",
    "dash.valueByCategory": "Value by category",
    "dash.upcomingRenewals": "Upcoming renewals",
    "dash.legend.insured": "Fully insured",
    "dash.legend.underinsured": "Underinsured",
    "dash.legend.uninsured": "Uninsured",
    "dash.protected": "protected",
    "dash.soon": "soon",
    "dash.ctaTitle": "Need cover for something new?",
    "dash.ctaSub": "Just describe it - Cova adds it to your VaultLog and finds the right insurance.",
    "dash.ctaBtn": "Chat with Cova",
    "dash.recentClaims": "Recent claims",
    "dash.trackAll": "Track all",
    // ---- vaultlog ----
    "vl.subtitleBiz": "Your company's assets",
    "vl.subtitlePersonal": "Everything you own",
    "vl.subtitleTail": "- with real replacement costs & live coverage.",
    "vl.moveExisting": "Move existing policy",
    "vl.schedule": "Schedule of assets",
    "vl.addChat": "Add via chat",
    "vl.totalReplacement": "Total replacement value",
    "vl.sumInsured": "Sum insured",
    "vl.coverageGap": "Coverage gap",
    "vl.fullyProtected": "Fully protected",
    "vl.closeIt": "Close it",
    "vl.activeAssets": "Active assets",
    "vl.fullyCovered": "{n} fully covered",
    "vl.annualPremium": "Annual premium",
    "vl.acrossPolicies": "across all policies",
    "vl.covered": "covered",
    "vl.filter.all": "All assets",
    "vl.filter.uninsured": "Uninsured",
    "vl.filter.partial": "Underinsured",
    "vl.filter.lapsing": "Lapsing",
    "vl.filter.insured": "Insured",
    // ---- claims ----
    "cl.subtitle": "From first notice to settlement - Cova guides every step.",
    "cl.fileClaim": "File a claim",
    "cl.openClaims": "Open claims",
    "cl.settled": "Settled (12mo)",
    "cl.totalClaimed": "Total claimed",
    "cl.avgSettlement": "Avg. settlement",
    "cl.days": "{n} days",
    // ---- insight ----
    "in.subtitle": "Your total risk picture - scored, explained, and ranked by what to fix first.",
    "in.askScore": "Ask about my score",
    "in.riskScore": "RISK SCORE",
    "in.protected": "Protected",
    "in.exposedValue": "Exposed value",
    "in.assets": "Assets",
    "in.recommended": "Recommended actions - highest impact first",
    "in.exposureByCategory": "Exposure by category",
    "in.busy": "Cova has been busy",
    // ---- rewards ----
    "rw.subtitlePre": "Stay claim-free and get",
    "rw.subtitleStrong": "up to 7%",
    "rw.subtitlePost": "of your annual premium back. Insurance that rewards good risk.",
    // ---- settings ----
    "set.title": "Settings",
    "set.subtitle": "Manage your account, billing and how VaultCova looks & feels.",
    "set.nav.profile": "Profile",
    "set.nav.appearance": "Appearance",
    "set.nav.billing": "Billing & Payments",
    "set.nav.notifications": "Notifications",
    "set.nav.security": "Security",
    "set.language": "Language",
    "set.languageDesc": "VaultCova's interface and Cova's replies switch to the language you choose.",
    // ---- onboarding ----
    "onb.speaksLang": "Cova speaks your language",
    "onb.begin": "Let's begin",
    "onb.buildVault": "Build my vault",
    "onb.enterVault": "Enter my vault",
    "onb.businessAccount": "Business account",
    "onb.personalAccount": "Personal account",
    "onb.headlineBiz": "Let's protect your business",
    "onb.subBiz": "Cova builds a live register of your company's assets, with real replacement costs and the right cover.",
    "onb.headlinePersonal": "Let's protect what matters to you",
    "onb.subPersonal": "Tell Cova what you own. We'll track its real value and flag what's exposed - no jargon.",
    "onb.askTitleBiz": "What does your business need to cover?",
    "onb.askSubBiz": "Choose the areas that apply - Cova tailors your VaultLog around them.",
    "onb.askTitlePersonal": "What would you like to protect?",
    "onb.askSubPersonal": "Pick a few - you can add more anytime by chatting with Cova.",
    "onb.vaultReady": "Your VaultLog is ready",
    "onb.featVault": "Vault assets",
    "onb.featGaps": "Spot gaps",
    "onb.featInsure": "Insure smart",
    "onb.statAssets": "Assets",
    "onb.statValue": "Total value",
    "onb.statExposed": "Exposed",
  },

  pcm: {
    "nav.home": "Home", "nav.vaultlog": "VaultLog", "nav.insure": "Insure", "nav.claims": "Claims",
    "nav.insight": "Insight", "nav.rewards": "Rewards", "nav.settings": "Settings", "nav.admin": "Admin",
    "title.dashboard": "Dashboard", "title.vaultlog": "VaultLog", "title.insure": "Insure",
    "title.claims": "Claims", "title.insight": "Cova Insight", "title.rewards": "VaultRewards", "title.settings": "Settings",
    "topbar.personalVault": "Your personal vault",
    "dock.cova": "Cova", "dock.online": "● Dey online - I dey check am now-now",
    "dock.copilot": "COVA · CO-PILOT", "dock.placeholder": "Tell Cova anytin…",
    "chat.placeholder": "Talk wetin you get, abi ask anytin…",
    "chat.listening": "I dey hear you… talk now", "chat.voiceUnsupported": "Voice no dey work for dis browser",
    "chat.voiceOn": "Voice reply don on", "chat.voiceOff": "Voice reply don off",
    "mobile.home": "Home", "mobile.vault": "Vault", "mobile.claims": "Claims", "mobile.more": "More",
    "mobile.askCova": "Ask Cova", "mobile.adminConsole": "Admin console", "mobile.lightMode": "Light mode",
    "mobile.darkMode": "Dark mode", "mobile.personal": "Personal", "mobile.business": "Business",
    "common.askCova": "Ask Cova", "common.save": "Save am", "common.cancel": "Cancel", "common.back": "Go back",
    "common.continue": "Continue", "common.search": "Find your assets…", "common.all": "All",
    "status.insured": "Get cover", "status.partial": "Cover no reach", "status.lapsing": "E wan expire", "status.uninsured": "No cover",
    "dash.greeting": "How far, {name} 👋",
    "dash.greeting.morning": "Morning o, {name} 👋",
    "dash.greeting.evening": "Good evening, {name} 👋",
    "dash.titleBiz": "Your risk, sharp-sharp", "dash.titlePersonal": "Your assets, sharp-sharp",
    "dash.kpi.activePolicies": "Active policies", "dash.kpi.sumInsured": "Total wey you insure",
    "dash.kpi.gap": "Cover wey remain", "dash.kpi.openClaims": "Claims wey dey open",
    "dash.coverageHealth": "How your cover dey", "dash.openVaultlog": "Open VaultLog",
    "dash.valueByCategory": "Value by category", "dash.upcomingRenewals": "Renewals wey dey come",
    "dash.legend.insured": "Full cover", "dash.legend.underinsured": "Cover no reach", "dash.legend.uninsured": "No cover",
    "dash.protected": "dey safe", "dash.soon": "soon",
    "dash.ctaTitle": "You get new tin wey you wan cover?",
    "dash.ctaSub": "Just talk am - Cova go add am to your VaultLog and find correct insurance.",
    "dash.ctaBtn": "Chat with Cova", "dash.recentClaims": "Recent claims", "dash.trackAll": "Track all",
    "vl.subtitleBiz": "Your company assets", "vl.subtitlePersonal": "Everytin wey you get",
    "vl.subtitleTail": "- with correct replacement price & live cover.",
    "vl.moveExisting": "Move policy wey you get", "vl.schedule": "Schedule of assets", "vl.addChat": "Add am for chat",
    "vl.totalReplacement": "Total replacement value", "vl.sumInsured": "Sum insured",
    "vl.coverageGap": "Cover wey remain", "vl.fullyProtected": "Full cover", "vl.closeIt": "Close am",
    "vl.activeAssets": "Active assets", "vl.fullyCovered": "{n} get full cover",
    "vl.annualPremium": "Yearly premium", "vl.acrossPolicies": "for all policies", "vl.covered": "dey covered",
    "vl.filter.all": "All assets", "vl.filter.uninsured": "No cover", "vl.filter.partial": "Cover no reach",
    "vl.filter.lapsing": "E wan expire", "vl.filter.insured": "Get cover",
    "cl.subtitle": "From wen you report reach settlement - Cova go guide you for every step.",
    "cl.fileClaim": "File claim", "cl.openClaims": "Open claims", "cl.settled": "Don settle (12mo)",
    "cl.totalClaimed": "Total wey you claim", "cl.avgSettlement": "Avg. settlement", "cl.days": "{n} days",
    "in.subtitle": "Your full risk picture - dem score am, explain am, arrange wetin you go fix first.",
    "in.askScore": "Ask about my score", "in.riskScore": "RISK SCORE", "in.protected": "Dey safe",
    "in.exposedValue": "Value wey dey open", "in.assets": "Assets",
    "in.recommended": "Wetin you suppose do - di biggest one first", "in.exposureByCategory": "Risk by category",
    "in.busy": "Cova don dey work",
    "rw.subtitlePre": "No dey claim and collect", "rw.subtitleStrong": "reach 7%",
    "rw.subtitlePost": "of your yearly premium back. Insurance wey dey reward good risk.",
    "set.title": "Settings", "set.subtitle": "Manage your account, billing and how VaultCova dey look & feel.",
    "set.nav.profile": "Profile", "set.nav.appearance": "Appearance", "set.nav.billing": "Billing & Payments",
    "set.nav.notifications": "Notifications", "set.nav.security": "Security", "set.language": "Language",
    "set.languageDesc": "VaultCova interface and Cova reply go change to di language wey you choose.",
    "onb.speaksLang": "Cova dey speak your language", "onb.begin": "Make we start", "onb.buildVault": "Build my vault",
    "onb.enterVault": "Enter my vault", "onb.businessAccount": "Business account", "onb.personalAccount": "Personal account",
    "onb.headlineBiz": "Make we protect your business",
    "onb.subBiz": "Cova go build live register of your company assets, with correct replacement price and di right cover.",
    "onb.headlinePersonal": "Make we protect wetin matter to you",
    "onb.subPersonal": "Tell Cova wetin you get. We go track di real value and show wetin dey open - no big grammar.",
    "onb.askTitleBiz": "Wetin your business need to cover?",
    "onb.askSubBiz": "Choose di areas wey apply - Cova go arrange your VaultLog around dem.",
    "onb.askTitlePersonal": "Wetin you wan protect?",
    "onb.askSubPersonal": "Pick small - you fit add more anytime for chat with Cova.",
    "onb.vaultReady": "Your VaultLog don ready", "onb.featVault": "Vault assets", "onb.featGaps": "See gaps",
    "onb.featInsure": "Insure well", "onb.statAssets": "Assets", "onb.statValue": "Total value", "onb.statExposed": "Dey open",
  },

  yo: {
    "nav.home": "Ilé", "nav.vaultlog": "VaultLog", "nav.insure": "Dáàbòbò", "nav.claims": "Ẹ̀bẹ̀",
    "nav.insight": "Ìjìnlẹ̀", "nav.rewards": "Èrè", "nav.settings": "Ètò", "nav.admin": "Alàkòsò",
    "title.dashboard": "Pátákó", "title.vaultlog": "VaultLog", "title.insure": "Dáàbòbò",
    "title.claims": "Ẹ̀bẹ̀", "title.insight": "Cova Insight", "title.rewards": "VaultRewards", "title.settings": "Ètò",
    "topbar.personalVault": "Àpótí ara-ẹni",
    "dock.cova": "Cova", "dock.online": "● Ó wà lórí ẹ̀rọ - ń ṣàyẹ̀wò lẹ́sẹ̀kẹsẹ̀",
    "dock.copilot": "COVA · AWAKỌ̀-AI", "dock.placeholder": "Sọ ohunkóhun fún Cova…",
    "chat.placeholder": "Ṣàpèjúwe ohun tí o ní, tàbí béèrè ohunkóhun…",
    "chat.listening": "Mò ń gbọ́… sọ̀rọ̀ báyìí", "chat.voiceUnsupported": "Ìbánisọ̀rọ̀ ohùn kò ṣiṣẹ́ nínú ẹ̀rọ aṣàwákiri yìí",
    "chat.voiceOn": "Ìdáhùn ohùn ti ṣíṣẹ́", "chat.voiceOff": "Ìdáhùn ohùn ti dáwọ́",
    "mobile.home": "Ilé", "mobile.vault": "Àpótí", "mobile.claims": "Ẹ̀bẹ̀", "mobile.more": "Síwájú",
    "mobile.askCova": "Béèrè Cova", "mobile.adminConsole": "Ibùdó alàkòsò", "mobile.lightMode": "Ìmọ́lẹ̀",
    "mobile.darkMode": "Òkùnkùn", "mobile.personal": "Ara-ẹni", "mobile.business": "Òwò",
    "common.askCova": "Béèrè Cova", "common.save": "Fi pamọ́", "common.cancel": "Fagilé", "common.back": "Padà",
    "common.continue": "Tẹ̀síwájú", "common.search": "Wá àwọn ohun-ìní…", "common.all": "Gbogbo",
    "status.insured": "Ní ààbò", "status.partial": "Ààbò kò tó", "status.lapsing": "Ó fẹ́ pari", "status.uninsured": "Kò ní ààbò",
    "dash.greeting": "Ẹ káàsán, {name} 👋",
    "dash.greeting.morning": "Ẹ káàárọ̀, {name} 👋",
    "dash.greeting.evening": "Ẹ káalẹ́, {name} 👋",
    "dash.titleBiz": "Ewu rẹ, ní ojú kan", "dash.titlePersonal": "Ohun-ìní rẹ, ní ojú kan",
    "dash.kpi.activePolicies": "Àwọn ìlànà tó ń ṣiṣẹ́", "dash.kpi.sumInsured": "Àpapọ̀ iye tó ní ààbò",
    "dash.kpi.gap": "Àlàfo ààbò", "dash.kpi.openClaims": "Ẹ̀bẹ̀ tó ṣí sílẹ̀",
    "dash.coverageHealth": "Ìlera ààbò", "dash.openVaultlog": "Ṣí VaultLog",
    "dash.valueByCategory": "Iye nípa ẹ̀ka", "dash.upcomingRenewals": "Ìsọdọtun tó ń bọ̀",
    "dash.legend.insured": "Ààbò kíkún", "dash.legend.underinsured": "Ààbò kò tó", "dash.legend.uninsured": "Kò ní ààbò",
    "dash.protected": "ní ààbò", "dash.soon": "láìpẹ́",
    "dash.ctaTitle": "Ṣé o nílò ààbò fún ohun tuntun?",
    "dash.ctaSub": "Kàn ṣàpèjúwe rẹ̀ - Cova yóò fi kún VaultLog rẹ yóò sì wá ìnsúóránsì tó tọ́.",
    "dash.ctaBtn": "Bá Cova sọ̀rọ̀", "dash.recentClaims": "Ẹ̀bẹ̀ àìpẹ́", "dash.trackAll": "Tọ́jú gbogbo",
    "vl.subtitleBiz": "Ohun-ìní ilé-iṣẹ́ rẹ", "vl.subtitlePersonal": "Gbogbo ohun tí o ní",
    "vl.subtitleTail": "- pẹ̀lú iye ìrọ́pò gidi & ààbò tó ń ṣiṣẹ́.",
    "vl.moveExisting": "Gbé ìlànà tó wà", "vl.schedule": "Àkójọ ohun-ìní", "vl.addChat": "Fi kún nípa ìjíròrò",
    "vl.totalReplacement": "Àpapọ̀ iye ìrọ́pò", "vl.sumInsured": "Iye tó ní ààbò",
    "vl.coverageGap": "Àlàfo ààbò", "vl.fullyProtected": "Ààbò kíkún", "vl.closeIt": "Tì í",
    "vl.activeAssets": "Ohun-ìní tó ń ṣiṣẹ́", "vl.fullyCovered": "{n} ní ààbò kíkún",
    "vl.annualPremium": "Owó ọdọọdún", "vl.acrossPolicies": "kọjá gbogbo ìlànà", "vl.covered": "ní ààbò",
    "vl.filter.all": "Gbogbo ohun-ìní", "vl.filter.uninsured": "Kò ní ààbò", "vl.filter.partial": "Ààbò kò tó",
    "vl.filter.lapsing": "Ó fẹ́ pari", "vl.filter.insured": "Ní ààbò",
    "cl.subtitle": "Láti ìkìlọ̀ àkọ́kọ́ dé ìpinnu - Cova ń ṣamọ̀nà ìgbésẹ̀ kọ̀ọ̀kan.",
    "cl.fileClaim": "Fi ẹ̀bẹ̀ sílẹ̀", "cl.openClaims": "Ẹ̀bẹ̀ tó ṣí", "cl.settled": "Tí parí (oṣù 12)",
    "cl.totalClaimed": "Àpapọ̀ ẹ̀bẹ̀", "cl.avgSettlement": "Ìpinnu ní àpapọ̀", "cl.days": "Ọjọ́ {n}",
    "in.subtitle": "Àwòrán ewu rẹ lápapọ̀ - pẹ̀lú àmì, àlàyé, àti ètò ohun tí o gbọ́dọ̀ tún ṣe ní àkọ́kọ́.",
    "in.askScore": "Béèrè nípa àmì mi", "in.riskScore": "ÀMÌ EWU", "in.protected": "Ní ààbò",
    "in.exposedValue": "Iye tó wà nínú ewu", "in.assets": "Ohun-ìní",
    "in.recommended": "Ìgbésẹ̀ tó yẹ - èyí tó ṣe pàtàkì jù ní àkọ́kọ́", "in.exposureByCategory": "Ewu nípa ẹ̀ka",
    "in.busy": "Cova ti ń ṣiṣẹ́",
    "rw.subtitlePre": "Má ṣe ẹ̀bẹ̀ kí o sì gba", "rw.subtitleStrong": "tó dé 7%",
    "rw.subtitlePost": "nínú owó ọdọọdún rẹ padà. Ìnsúóránsì tó ń san èrè fún ewu rere.",
    "set.title": "Ètò", "set.subtitle": "Ṣàkóso àkántì rẹ, ìsanwó àti bí VaultCova ṣe rí.",
    "set.nav.profile": "Profáìlì", "set.nav.appearance": "Ìrísí", "set.nav.billing": "Ìdíyelé & Ìsanwó",
    "set.nav.notifications": "Ìfitọ́nilétí", "set.nav.security": "Ààbò", "set.language": "Èdè",
    "set.languageDesc": "Ìrísí VaultCova àti ìdáhùn Cova yóò yí padà sí èdè tí o yàn.",
    "onb.speaksLang": "Cova ń sọ èdè rẹ", "onb.begin": "Ẹ jẹ́ ká bẹ̀rẹ̀", "onb.buildVault": "Kọ́ àpótí mi",
    "onb.enterVault": "Wọ àpótí mi", "onb.businessAccount": "Àkántì òwò", "onb.personalAccount": "Àkántì ara-ẹni",
    "onb.headlineBiz": "Ẹ jẹ́ ká dáàbò bo òwò rẹ",
    "onb.subBiz": "Cova ń kọ́ àkójọ ohun-ìní ilé-iṣẹ́ rẹ, pẹ̀lú iye ìrọ́pò gidi àti ààbò tó tọ́.",
    "onb.headlinePersonal": "Ẹ jẹ́ ká dáàbò bo ohun tó ṣe pàtàkì",
    "onb.subPersonal": "Sọ ohun tí o ní fún Cova. A óò tọ́jú iye gidi rẹ̀ kí a sì fi ohun tó wà nínú ewu hàn - láìsí gírámà.",
    "onb.askTitleBiz": "Kí ni òwò rẹ nílò láti dáàbò bo?",
    "onb.askSubBiz": "Yan àwọn agbègbè tó báramu - Cova yóò ṣe àtúnṣe VaultLog rẹ.",
    "onb.askTitlePersonal": "Kí lo fẹ́ dáàbò bo?",
    "onb.askSubPersonal": "Yan díẹ̀ - o lè fi kún nígbàkugbà nípa ìjíròrò pẹ̀lú Cova.",
    "onb.vaultReady": "VaultLog rẹ ti ṣetán", "onb.featVault": "Ohun-ìní àpótí", "onb.featGaps": "Rí àlàfo",
    "onb.featInsure": "Dáàbò bo dáadáa", "onb.statAssets": "Ohun-ìní", "onb.statValue": "Àpapọ̀ iye", "onb.statExposed": "Nínú ewu",
  },

  ha: {
    "nav.home": "Gida", "nav.vaultlog": "VaultLog", "nav.insure": "Inshora", "nav.claims": "Da'awa",
    "nav.insight": "Fahimta", "nav.rewards": "Lada", "nav.settings": "Saiti", "nav.admin": "Manaja",
    "title.dashboard": "Allo", "title.vaultlog": "VaultLog", "title.insure": "Inshora",
    "title.claims": "Da'awa", "title.insight": "Cova Insight", "title.rewards": "VaultRewards", "title.settings": "Saiti",
    "topbar.personalVault": "Ma'ajiyar kanka",
    "dock.cova": "Cova", "dock.online": "● Yana kan layi - yana tantancewa nan take",
    "dock.copilot": "COVA · MATUKIN AI", "dock.placeholder": "Gaya wa Cova komai…",
    "chat.placeholder": "Bayyana abin da kake da shi, ko tambayi komai…",
    "chat.listening": "Ina sauraro… yi magana yanzu", "chat.voiceUnsupported": "Shigar murya ba ta aiki a wannan browser",
    "chat.voiceOn": "Amsar murya na kunne", "chat.voiceOff": "Amsar murya na kashe",
    "mobile.home": "Gida", "mobile.vault": "Ma'ajiya", "mobile.claims": "Da'awa", "mobile.more": "Ƙari",
    "mobile.askCova": "Tambayi Cova", "mobile.adminConsole": "Allon manaja", "mobile.lightMode": "Yanayin haske",
    "mobile.darkMode": "Yanayin duhu", "mobile.personal": "Na kai", "mobile.business": "Kasuwanci",
    "common.askCova": "Tambayi Cova", "common.save": "Ajiye", "common.cancel": "Soke", "common.back": "Koma",
    "common.continue": "Ci gaba", "common.search": "Nemo kadarori…", "common.all": "Duka",
    "status.insured": "Yana da inshora", "status.partial": "Inshora bai isa ba", "status.lapsing": "Zai ƙare", "status.uninsured": "Babu inshora",
    "dash.greeting": "Barka da rana, {name} 👋",
    "dash.greeting.morning": "Barka da safiya, {name} 👋",
    "dash.greeting.evening": "Barka da yamma, {name} 👋",
    "dash.titleBiz": "Hadarin ka, a kallo ɗaya", "dash.titlePersonal": "Kadarorin ka, a kallo ɗaya",
    "dash.kpi.activePolicies": "Manufofin da ke aiki", "dash.kpi.sumInsured": "Jimillar da aka yi inshora",
    "dash.kpi.gap": "Gibin inshora", "dash.kpi.openClaims": "Da'awar da ke buɗe",
    "dash.coverageHealth": "Lafiyar inshora", "dash.openVaultlog": "Buɗe VaultLog",
    "dash.valueByCategory": "Daraja ta rukuni", "dash.upcomingRenewals": "Sabuntawa masu zuwa",
    "dash.legend.insured": "Cikakken inshora", "dash.legend.underinsured": "Inshora bai isa ba", "dash.legend.uninsured": "Babu inshora",
    "dash.protected": "an kiyaye", "dash.soon": "ba da daɗewa ba",
    "dash.ctaTitle": "Kana buƙatar inshora don sabon abu?",
    "dash.ctaSub": "Kawai bayyana shi - Cova zai ƙara shi cikin VaultLog kuma ya nemo inshora mai dacewa.",
    "dash.ctaBtn": "Yi magana da Cova", "dash.recentClaims": "Da'awa na baya-bayan nan", "dash.trackAll": "Bi duka",
    "vl.subtitleBiz": "Kadarorin kamfanin ka", "vl.subtitlePersonal": "Duk abin da kake da shi",
    "vl.subtitleTail": "- tare da ainihin farashin maye gurbi & inshora kai tsaye.",
    "vl.moveExisting": "Matsar da manufar da ke akwai", "vl.schedule": "Jadawalin kadarori", "vl.addChat": "Ƙara ta hira",
    "vl.totalReplacement": "Jimillar darajar maye gurbi", "vl.sumInsured": "Adadin inshora",
    "vl.coverageGap": "Gibin inshora", "vl.fullyProtected": "An kiyaye sosai", "vl.closeIt": "Rufe shi",
    "vl.activeAssets": "Kadarorin da ke aiki", "vl.fullyCovered": "{n} an rufe gaba ɗaya",
    "vl.annualPremium": "Kuɗin shekara", "vl.acrossPolicies": "a duk manufofin", "vl.covered": "an rufe",
    "vl.filter.all": "Duk kadarori", "vl.filter.uninsured": "Babu inshora", "vl.filter.partial": "Inshora bai isa ba",
    "vl.filter.lapsing": "Zai ƙare", "vl.filter.insured": "Yana da inshora",
    "cl.subtitle": "Daga sanarwa ta farko zuwa biyan kuɗi - Cova na jagorantar kowane mataki.",
    "cl.fileClaim": "Shigar da da'awa", "cl.openClaims": "Da'awar da ke buɗe", "cl.settled": "An warware (wata 12)",
    "cl.totalClaimed": "Jimillar da'awa", "cl.avgSettlement": "Matsakaicin warwarewa", "cl.days": "Kwana {n}",
    "in.subtitle": "Cikakken hoton hadarin ka - an kima, an bayyana, kuma an jera abin da za a fara gyara.",
    "in.askScore": "Tambaya game da makin na", "in.riskScore": "MAƘIN HADARI", "in.protected": "An kiyaye",
    "in.exposedValue": "Darajar da ke cikin haɗari", "in.assets": "Kadarori",
    "in.recommended": "Ayyukan da aka ba da shawara - mafi tasiri da farko", "in.exposureByCategory": "Haɗari ta rukuni",
    "in.busy": "Cova ya kasance da aiki",
    "rw.subtitlePre": "Kasance ba tare da da'awa ba ka samu", "rw.subtitleStrong": "har 7%",
    "rw.subtitlePost": "na kuɗin shekara naka. Inshora da ke ba da lada don ƙananan haɗari.",
    "set.title": "Saiti", "set.subtitle": "Sarrafa asusunka, biyan kuɗi da yadda VaultCova ke kallo.",
    "set.nav.profile": "Bayani", "set.nav.appearance": "Kamanni", "set.nav.billing": "Biyan kuɗi",
    "set.nav.notifications": "Sanarwa", "set.nav.security": "Tsaro", "set.language": "Harshe",
    "set.languageDesc": "Fuskar VaultCova da amsoshin Cova za su canza zuwa harshen da ka zaɓa.",
    "onb.speaksLang": "Cova na magana da harshenka", "onb.begin": "Mu fara", "onb.buildVault": "Gina ma'ajiyata",
    "onb.enterVault": "Shiga ma'ajiyata", "onb.businessAccount": "Asusun kasuwanci", "onb.personalAccount": "Asusun kai",
    "onb.headlineBiz": "Mu kiyaye kasuwancin ka",
    "onb.subBiz": "Cova na gina jerin kadarorin kamfanin ka, tare da ainihin farashin maye gurbi da inshora mai dacewa.",
    "onb.headlinePersonal": "Mu kiyaye abin da ke da muhimmanci a gare ka",
    "onb.subPersonal": "Gaya wa Cova abin da kake da shi. Za mu bi ainihin darajarsa kuma mu nuna abin da ke cikin haɗari - ba tare da kalmomi masu wuya ba.",
    "onb.askTitleBiz": "Me kasuwancin ka ke buƙatar kiyayewa?",
    "onb.askSubBiz": "Zaɓi yankunan da suka dace - Cova zai tsara VaultLog ɗinka.",
    "onb.askTitlePersonal": "Me kake son kiyayewa?",
    "onb.askSubPersonal": "Zaɓi kaɗan - za ka iya ƙara ƙari a kowane lokaci ta hira da Cova.",
    "onb.vaultReady": "VaultLog ɗinka ya shirya", "onb.featVault": "Ma'ajiyar kadarori", "onb.featGaps": "Gano gibi",
    "onb.featInsure": "Yi inshora da kyau", "onb.statAssets": "Kadarori", "onb.statValue": "Jimillar daraja", "onb.statExposed": "Cikin haɗari",
  },

  ig: {
    "nav.home": "Ụlọ", "nav.vaultlog": "VaultLog", "nav.insure": "Mkpuchi", "nav.claims": "Arịrịọ",
    "nav.insight": "Nghọta", "nav.rewards": "Ụgwọ", "nav.settings": "Ntọala", "nav.admin": "Onye nchịkwa",
    "title.dashboard": "Dashboard", "title.vaultlog": "VaultLog", "title.insure": "Mkpuchi",
    "title.claims": "Arịrịọ", "title.insight": "Cova Insight", "title.rewards": "VaultRewards", "title.settings": "Ntọala",
    "topbar.personalVault": "Ụlọ nchekwa gị",
    "dock.cova": "Cova", "dock.online": "● Nọ n'ịntanetị - na-enyocha ozugbo",
    "dock.copilot": "COVA · CO-PILOT", "dock.placeholder": "Gwa Cova ihe ọ bụla…",
    "chat.placeholder": "Kọwaa ihe i nwere, ma ọ bụ jụọ ihe ọ bụla…",
    "chat.listening": "Ana m ege ntị… kwuo ugbu a", "chat.voiceUnsupported": "Ntinye olu adịghị arụ ọrụ na ihe nchọgharị a",
    "chat.voiceOn": "Nzaghachi olu agbanyere", "chat.voiceOff": "Nzaghachi olu agbanyụọla",
    "mobile.home": "Ụlọ", "mobile.vault": "Vault", "mobile.claims": "Arịrịọ", "mobile.more": "Ọzọ",
    "mobile.askCova": "Jụọ Cova", "mobile.adminConsole": "Console onye nchịkwa", "mobile.lightMode": "Ọcha",
    "mobile.darkMode": "Ọchịchịrị", "mobile.personal": "Nke onwe", "mobile.business": "Azụmaahịa",
    "common.askCova": "Jụọ Cova", "common.save": "Chekwaa", "common.cancel": "Kagbuo", "common.back": "Laghachi",
    "common.continue": "Gaa n'ihu", "common.search": "Chọọ akụ…", "common.all": "Nile",
    "status.insured": "Nwere mkpuchi", "status.partial": "Mkpuchi ezughị", "status.lapsing": "Ọ na-agwụ", "status.uninsured": "Enweghị mkpuchi",
    "dash.greeting": "Ezigbo ehihie, {name} 👋",
    "dash.greeting.morning": "Ụtụtụ ọma, {name} 👋",
    "dash.greeting.evening": "Mgbede ọma, {name} 👋",
    "dash.titleBiz": "Ihe ize ndụ gị, n'otu anya", "dash.titlePersonal": "Akụ gị, n'otu anya",
    "dash.kpi.activePolicies": "Iwu na-arụ ọrụ", "dash.kpi.sumInsured": "Mkpokọta ego e mere mkpuchi",
    "dash.kpi.gap": "Oghere mkpuchi", "dash.kpi.openClaims": "Arịrịọ ghere oghe",
    "dash.coverageHealth": "Ahụike mkpuchi", "dash.openVaultlog": "Mepee VaultLog",
    "dash.valueByCategory": "Uru site na ụdị", "dash.upcomingRenewals": "Mmeghari na-abịa",
    "dash.legend.insured": "Mkpuchi zuru oke", "dash.legend.underinsured": "Mkpuchi ezughị", "dash.legend.uninsured": "Enweghị mkpuchi",
    "dash.protected": "echekwara", "dash.soon": "n'oge na-adịghị anya",
    "dash.ctaTitle": "Ị chọrọ mkpuchi maka ihe ọhụrụ?",
    "dash.ctaSub": "Naanị kọwaa ya - Cova ga-agbakwunye ya na VaultLog gị wee chọta mkpuchi kwesịrị ekwesị.",
    "dash.ctaBtn": "Soro Cova kparịta ụka", "dash.recentClaims": "Arịrịọ na nso nso a", "dash.trackAll": "Soro nile",
    "vl.subtitleBiz": "Akụ ụlọ ọrụ gị", "vl.subtitlePersonal": "Ihe niile i nwere",
    "vl.subtitleTail": "- yana ezigbo ọnụ ahịa nnọchi & mkpuchi dị ndụ.",
    "vl.moveExisting": "Bufee iwu dị adị", "vl.schedule": "Nhazi akụ", "vl.addChat": "Tinye site na nkata",
    "vl.totalReplacement": "Mkpokọta uru nnọchi", "vl.sumInsured": "Ego e mere mkpuchi",
    "vl.coverageGap": "Oghere mkpuchi", "vl.fullyProtected": "Echekwara zuru oke", "vl.closeIt": "Mechie ya",
    "vl.activeAssets": "Akụ na-arụ ọrụ", "vl.fullyCovered": "{n} kpuchiri kpamkpam",
    "vl.annualPremium": "Ụgwọ kwa afọ", "vl.acrossPolicies": "n'iwu niile", "vl.covered": "kpuchiri",
    "vl.filter.all": "Akụ niile", "vl.filter.uninsured": "Enweghị mkpuchi", "vl.filter.partial": "Mkpuchi ezughị",
    "vl.filter.lapsing": "Ọ na-agwụ", "vl.filter.insured": "Nwere mkpuchi",
    "cl.subtitle": "Site na ọkwa mbụ ruo na ngwụcha - Cova na-eduzi nzọ ọ bụla.",
    "cl.fileClaim": "Tinye arịrịọ", "cl.openClaims": "Arịrịọ ghere oghe", "cl.settled": "Edozila (ọnwa 12)",
    "cl.totalClaimed": "Mkpokọta arịrịọ", "cl.avgSettlement": "Nkezi ndozi", "cl.days": "Ụbọchị {n}",
    "in.subtitle": "Foto ihe ize ndụ gị niile - e nyere akara, kọwaa, ma hazie ihe ị ga-edozi mbụ.",
    "in.askScore": "Jụọ maka akara m", "in.riskScore": "AKARA IZE NDỤ", "in.protected": "Echekwara",
    "in.exposedValue": "Uru nọ n'ihe ize ndụ", "in.assets": "Akụ",
    "in.recommended": "Omume a tụrụ aro - nke kacha mkpa na mbụ", "in.exposureByCategory": "Ihe ize ndụ site na ụdị",
    "in.busy": "Cova anọwo na-arụsi ọrụ",
    "rw.subtitlePre": "Nọrọ na-enweghị arịrịọ ma nweta", "rw.subtitleStrong": "ruo 7%",
    "rw.subtitlePost": "nke ụgwọ kwa afọ gị azụ. Mkpuchi na-akwụ ụgwọ maka ezigbo ize ndụ.",
    "set.title": "Ntọala", "set.subtitle": "Jikwaa akaụntụ gị, ụgwọ na otú VaultCova si ele anya.",
    "set.nav.profile": "Profaịlụ", "set.nav.appearance": "Ọdịdị", "set.nav.billing": "Ụgwọ & Ịkwụ ụgwọ",
    "set.nav.notifications": "Ọkwa", "set.nav.security": "Nchekwa", "set.language": "Asụsụ",
    "set.languageDesc": "Ihu VaultCova na nzaghachi Cova ga-agbanwe gaa n'asụsụ ị họọrọ.",
    "onb.speaksLang": "Cova na-asụ asụsụ gị", "onb.begin": "Ka anyị malite", "onb.buildVault": "Wuo vault m",
    "onb.enterVault": "Banye vault m", "onb.businessAccount": "Akaụntụ azụmaahịa", "onb.personalAccount": "Akaụntụ nke onwe",
    "onb.headlineBiz": "Ka anyị chebe azụmaahịa gị",
    "onb.subBiz": "Cova na-ewu ndekọ dị ndụ nke akụ ụlọ ọrụ gị, yana ezigbo ọnụ ahịa nnọchi na mkpuchi kwesịrị ekwesị.",
    "onb.headlinePersonal": "Ka anyị chebe ihe dị gị mkpa",
    "onb.subPersonal": "Gwa Cova ihe i nwere. Anyị ga-eso ezigbo uru ya ma gosi ihe nọ n'ihe ize ndụ - n'enweghị okwu siri ike.",
    "onb.askTitleBiz": "Gịnị ka azụmaahịa gị chọrọ ichebe?",
    "onb.askSubBiz": "Họrọ mpaghara ndị dabara - Cova ga-ahazi VaultLog gị.",
    "onb.askTitlePersonal": "Gịnị ka ị chọrọ ichebe?",
    "onb.askSubPersonal": "Họrọ ole na ole - ị nwere ike ịgbakwunye ọzọ mgbe ọ bụla site na nkata na Cova.",
    "onb.vaultReady": "VaultLog gị adịla njikere", "onb.featVault": "Akụ vault", "onb.featGaps": "Chọpụta oghere",
    "onb.featInsure": "Mee mkpuchi nke ọma", "onb.statAssets": "Akụ", "onb.statValue": "Mkpokọta uru", "onb.statExposed": "N'ihe ize ndụ",
  },
};

// ---------------------------------------------------------------------------
// Engine
// ---------------------------------------------------------------------------
function humanizeKey(key) {
  const tail = key.split(".").pop();
  return tail.charAt(0).toUpperCase() + tail.slice(1).replace(/([A-Z])/g, " $1");
}

function makeT(lang) {
  const dict = STRINGS[lang] || STRINGS.en;
  const fn = (key, vars) => {
    let v = dict[key];
    if (v == null) v = STRINGS.en[key]; // graceful fallback to English
    if (v == null) v = humanizeKey(key); // last resort - never show a raw key
    if (vars) {
      Object.keys(vars).forEach((k) => {
        v = v.replace(new RegExp("\\{" + k + "\\}", "g"), vars[k]);
      });
    }
    return v;
  };
  fn.lang = lang;
  return fn;
}

const LangContext = React.createContext({ lang: "en", t: makeT("en") });
function useT() { return React.useContext(LangContext); }

// Persist + read language choice
const LANG_KEY = "vc_lang_v1";
function loadLang() {
  try { const v = localStorage.getItem(LANG_KEY); if (v && STRINGS[v]) return v; } catch (e) {}
  return "en";
}
function saveLang(lang) { try { localStorage.setItem(LANG_KEY, lang); } catch (e) {} }

function localeFor(lang) { return (VC_LANGS.find((l) => l.id === lang) || VC_LANGS[0]).locale; }

window.I18N = { STRINGS, makeT, LangContext, useT, VC_LANGS, loadLang, saveLang, localeFor };
window.useT = useT;
window.makeT = makeT;
window.LangContext = LangContext;
window.VC_LANGS = VC_LANGS;
