/* GUIDKO i18n universel — sélecteur langue + pays + devise, RTL, et
   couche de traduction interne (l'app s'adapte à la langue de l'opérateur).
   Le t(fr,en) existant continue de marcher : pour toute langue ≠ fr/en,
   on traduit la base EN via GK_PHRASES, sinon on retombe sur l'anglais. */

const GK_LOCALES = [
  { code: "fr", native: "Français",  en: "French",     flag: "🇫🇷", country: "France",        cur: "EUR", dir: "ltr" },
  { code: "en", native: "English",   en: "English",    flag: "🇬🇧", country: "United Kingdom", cur: "GBP", dir: "ltr" },
  { code: "es", native: "Español",   en: "Spanish",    flag: "🇪🇸", country: "España",         cur: "EUR", dir: "ltr" },
  { code: "pt", native: "Português", en: "Portuguese", flag: "🇧🇷", country: "Brasil",         cur: "BRL", dir: "ltr" },
  { code: "de", native: "Deutsch",   en: "German",     flag: "🇩🇪", country: "Deutschland",    cur: "EUR", dir: "ltr" },
  { code: "it", native: "Italiano",  en: "Italian",    flag: "🇮🇹", country: "Italia",         cur: "EUR", dir: "ltr" },
  { code: "nl", native: "Nederlands",en: "Dutch",      flag: "🇳🇱", country: "Nederland",      cur: "EUR", dir: "ltr" },
  { code: "ar", native: "العربية",   en: "Arabic",     flag: "🇲🇦", country: "المغرب",          cur: "MAD", dir: "rtl" },
  { code: "tr", native: "Türkçe",    en: "Turkish",    flag: "🇹🇷", country: "Türkiye",        cur: "TRY", dir: "ltr" },
  { code: "ru", native: "Русский",   en: "Russian",    flag: "🇷🇺", country: "Россия",          cur: "RUB", dir: "ltr" },
  { code: "zh", native: "中文",       en: "Chinese",    flag: "🇨🇳", country: "中国",            cur: "CNY", dir: "ltr" },
  { code: "ja", native: "日本語",     en: "Japanese",   flag: "🇯🇵", country: "日本",            cur: "JPY", dir: "ltr" },
  { code: "hi", native: "हिन्दी",      en: "Hindi",      flag: "🇮🇳", country: "भारत",            cur: "INR", dir: "ltr" },
  { code: "sw", native: "Kiswahili", en: "Swahili",    flag: "🇰🇪", country: "Kenya",          cur: "KES", dir: "ltr" },
];

// Dictionnaire interne (clé = base EN). Langues couvertes en priorité ; sinon → EN.
const GK_PHRASES = {
  es: {
    "Overview":"Resumen","Schedule":"Agenda","Students":"Alumnos","My students":"Mis alumnos","Instructors":"Instructores","Vehicles":"Vehículos","Analytics":"Analítica","Finance":"Finanzas","Wallet":"Cartera","Messages":"Mensajes","Trust":"Confianza","Plans":"Planes","Settings":"Ajustes","Profile":"Perfil","My day":"Mi día","My progress":"Mi progreso","Book":"Reservar","Code test":"Código","Earnings":"Ingresos","Reception":"Recepción","Enrollments":"Inscripciones","Home":"Inicio","Passenger":"Pasajero","Driver":"Conductor","Offer":"Publicar","GUIDAROUTE":"GUIDAROUTE","Order":"Pedir","Deliver":"Repartir","Delivery GPS":"GPS Reparto",
    "Search…":"Buscar…","Send":"Enviar","Sign in":"Iniciar sesión","All apps":"Todas las apps","Workspace":"Espacio","Switch role":"Cambiar rol","Sign out":"Cerrar sesión","Write a message…":"Escribe un mensaje…","Messaging":"Mensajería","MESSAGING":"MENSAJERÍA","CONVERSATIONS — ALL SERVICES":"CONVERSACIONES — TODOS LOS SERVICIOS","Protected":"Protegido","Pick a conversation":"Elige una conversación","Instant translation":"Traducción instantánea","Translated from":"Traducido de","Just now":"Ahora mismo","More":"Más","Verified":"Verificado","In progress":"En curso","Upload":"Subir","Reset":"Reiniciar",
  },
  pt: {
    "Overview":"Visão geral","Schedule":"Agenda","Students":"Alunos","My students":"Meus alunos","Instructors":"Instrutores","Vehicles":"Veículos","Analytics":"Análises","Finance":"Finanças","Wallet":"Carteira","Messages":"Mensagens","Trust":"Confiança","Plans":"Planos","Settings":"Configurações","Profile":"Perfil","My day":"Meu dia","My progress":"Meu progresso","Book":"Reservar","Code test":"Código","Earnings":"Ganhos","Reception":"Recepção","Enrollments":"Inscrições","Home":"Início","Passenger":"Passageiro","Driver":"Motorista","Offer":"Publicar","GUIDAROUTE":"GUIDAROUTE","Order":"Pedir","Deliver":"Entregar","Delivery GPS":"GPS Entrega",
    "Search…":"Buscar…","Send":"Enviar","Sign in":"Entrar","All apps":"Todos os apps","Workspace":"Espaço","Switch role":"Trocar de papel","Sign out":"Sair","Write a message…":"Escreva uma mensagem…","Messaging":"Mensagens","MESSAGING":"MENSAGENS","CONVERSATIONS — ALL SERVICES":"CONVERSAS — TODOS OS SERVIÇOS","Protected":"Protegido","Pick a conversation":"Escolha uma conversa","Instant translation":"Tradução instantânea","Translated from":"Traduzido de","Just now":"Agora mesmo","More":"Mais","Verified":"Verificado","In progress":"Em andamento","Upload":"Enviar","Reset":"Redefinir",
  },
  de: {
    "Overview":"Übersicht","Schedule":"Kalender","Students":"Schüler","My students":"Meine Schüler","Instructors":"Fahrlehrer","Vehicles":"Fahrzeuge","Analytics":"Analysen","Finance":"Finanzen","Wallet":"Wallet","Messages":"Nachrichten","Trust":"Vertrauen","Plans":"Tarife","Settings":"Einstellungen","Profile":"Profil","My day":"Mein Tag","My progress":"Mein Fortschritt","Book":"Buchen","Code test":"Theorie","Earnings":"Einnahmen","Reception":"Empfang","Enrollments":"Anmeldungen","Home":"Start","Passenger":"Mitfahrer","Driver":"Fahrer","Offer":"Anbieten","GUIDAROUTE":"GUIDAROUTE","Order":"Bestellen","Deliver":"Liefern","Delivery GPS":"Liefer-GPS",
    "Search…":"Suchen…","Send":"Senden","Sign in":"Anmelden","All apps":"Alle Apps","Workspace":"Bereich","Switch role":"Rolle wechseln","Sign out":"Abmelden","Write a message…":"Nachricht schreiben…","Messaging":"Nachrichten","MESSAGING":"NACHRICHTEN","Protected":"Geschützt","Pick a conversation":"Konversation wählen","Instant translation":"Sofortübersetzung","Translated from":"Übersetzt aus","Just now":"Gerade eben","More":"Mehr","Verified":"Verifiziert","In progress":"Läuft","Upload":"Hochladen","Reset":"Zurücksetzen",
  },
  ar: {
    "Overview":"نظرة عامة","Schedule":"الجدول","Students":"الطلاب","My students":"طلابي","Instructors":"المدربون","Vehicles":"المركبات","Analytics":"التحليلات","Finance":"المالية","Wallet":"المحفظة","Messages":"الرسائل","Trust":"الثقة","Plans":"الباقات","Settings":"الإعدادات","Profile":"الملف","My day":"يومي","My progress":"تقدمي","Book":"حجز","Code test":"الكود","Earnings":"الأرباح","Reception":"الاستقبال","Enrollments":"التسجيلات","Home":"الرئيسية","Passenger":"راكب","Driver":"سائق","Offer":"نشر","GUIDAROUTE":"جي بي إس ليا","Order":"اطلب","Deliver":"توصيل","Delivery GPS":"جي بي إس التوصيل",
    "Search…":"بحث…","Send":"إرسال","Sign in":"تسجيل الدخول","All apps":"كل التطبيقات","Workspace":"مساحة العمل","Switch role":"تغيير الدور","Sign out":"خروج","Write a message…":"اكتب رسالة…","Messaging":"المراسلة","Protected":"محمي","Pick a conversation":"اختر محادثة","Instant translation":"ترجمة فورية","Translated from":"مترجم من","Just now":"الآن","More":"المزيد","Verified":"موثَّق","In progress":"جارٍ","Upload":"رفع","Reset":"إعادة",
  },
  it: {
    "Overview":"Panoramica","Schedule":"Agenda","Students":"Allievi","My students":"I miei allievi","Instructors":"Istruttori","Vehicles":"Veicoli","Analytics":"Analisi","Finance":"Finanze","Wallet":"Portafoglio","Messages":"Messaggi","Trust":"Fiducia","Plans":"Piani","Settings":"Impostazioni","Profile":"Profilo","My day":"La mia giornata","My progress":"I miei progressi","Book":"Prenota","Code test":"Codice","Earnings":"Guadagni","Home":"Home","Passenger":"Passeggero","Driver":"Conducente","Offer":"Pubblica","Order":"Ordina","Deliver":"Consegna",
    "Search…":"Cerca…","Send":"Invia","Sign in":"Accedi","All apps":"Tutte le app","Workspace":"Spazio","Switch role":"Cambia ruolo","Sign out":"Esci","Write a message…":"Scrivi un messaggio…","Protected":"Protetto","Instant translation":"Traduzione istantanea","Translated from":"Tradotto da","Just now":"Proprio ora","More":"Altro","Verified":"Verificato","Upload":"Carica","Reset":"Reimposta",
  },
  nl: {
    "Overview":"Overzicht","Schedule":"Agenda","Students":"Leerlingen","My students":"Mijn leerlingen","Instructors":"Instructeurs","Vehicles":"Voertuigen","Analytics":"Analyse","Finance":"Financiën","Wallet":"Portemonnee","Messages":"Berichten","Trust":"Vertrouwen","Plans":"Abonnementen","Settings":"Instellingen","Profile":"Profiel","Home":"Home","Passenger":"Passagier","Driver":"Bestuurder","Order":"Bestellen","Deliver":"Bezorgen",
    "Search…":"Zoeken…","Send":"Versturen","Sign in":"Inloggen","All apps":"Alle apps","Sign out":"Uitloggen","Write a message…":"Schrijf een bericht…","Instant translation":"Directe vertaling","Translated from":"Vertaald uit","Just now":"Zojuist","More":"Meer","Verified":"Geverifieerd","Upload":"Uploaden",
  },
};

// Traduit une base anglaise vers la langue cible (EN fallback).
function GKtranslate(en, lang) {
  if (lang === "en" || !en) return en;
  const d = GK_PHRASES[lang];
  if (d && d[en] != null) return d[en];
  return en; // langue non couverte → anglais (concept "auto-traduction")
}
function GKlocale(code) { return GK_LOCALES.find(l => l.code === (code || "fr")) || GK_LOCALES[0]; }

// ---------- Moteur multi-devises (taux indicatifs base EUR) ----------
const GK_RATES = { EUR: 1, GBP: 0.85, BRL: 5.45, MAD: 10.8, TRY: 35.2, RUB: 92, CNY: 7.85, JPY: 168, INR: 91, KES: 140, USD: 1.08 };
const GK_CUR_SYMBOL = { EUR: "€", GBP: "£", BRL: "R$", MAD: "DH", TRY: "₺", RUB: "₽", CNY: "¥", JPY: "¥", INR: "₹", KES: "KSh", USD: "$" };
// Devise active = celle de la locale courante (override possible)
function GKcurrency() {
  try { return GKlocale(window.__guidkoLang || localStorage.getItem("guidko_lang") || "fr").cur; } catch (e) { return "EUR"; }
}
// Convertit un montant EUR vers la devise active et le formate.
function GKmoney(amountEUR, opts) {
  const cur = (opts && opts.cur) || GKcurrency();
  const rate = GK_RATES[cur] || 1;
  const sym = GK_CUR_SYMBOL[cur] || cur;
  let v = amountEUR * rate;
  const noDec = (cur === "JPY" || cur === "RUB" || cur === "KES" || v >= 1000);
  const s = v.toLocaleString(undefined, { minimumFractionDigits: noDec ? 0 : 2, maximumFractionDigits: noDec ? 0 : 2 });
  return (cur === "EUR" || cur === "GBP" || cur === "TRY") ? `${s} ${sym}` : `${sym} ${s}`;
}

// Applique la direction du document (RTL pour arabe).
function GKapplyDir(code) {
  try { document.documentElement.dir = GKlocale(code).dir; document.documentElement.lang = code; } catch (e) {}
}

// Étiquette de nav multilingue (les items n'ont que fr/en).
function navLabel(item, lang) {
  if (lang === "fr") return item.fr;
  if (lang === "en") return item.en;
  return GKtranslate(item.en, lang);
}

// ---------- Sélecteur de langue universel ----------
function LangSelector({ dark = false, compact = false }) {
  const { lang, setLang } = useI18n();
  const [open, setOpen] = React.useState(false);
  const [q, setQ] = React.useState("");
  const cur = GKlocale(lang);
  const ref = React.useRef(null);

  React.useEffect(() => {
    const close = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
    document.addEventListener("click", close);
    return () => document.removeEventListener("click", close);
  }, []);

  const list = GK_LOCALES.filter(l =>
    !q || l.native.toLowerCase().includes(q.toLowerCase()) || l.en.toLowerCase().includes(q.toLowerCase()) || l.country.toLowerCase().includes(q.toLowerCase())
  );

  const bg = dark ? "#10172E" : "#fff";
  const bd = dark ? "#1F2949" : "#E3DCC9";
  const fg = dark ? "#fff" : "#0B0F1F";
  const muted = dark ? "#7A82A8" : "#6B7280";

  return (
    <div ref={ref} style={{ position: "relative" }}>
      <button onClick={(e) => { e.stopPropagation(); setOpen(o => !o); }} style={{ display: "inline-flex", alignItems: "center", gap: 7, padding: compact ? "6px 9px" : "7px 12px", borderRadius: 999, background: bg, border: `1px solid ${bd}`, color: fg, cursor: "pointer", fontSize: 13, fontWeight: 600, fontFamily: "'Geist', sans-serif" }}>
        <span style={{ fontSize: 15 }}>{cur.flag}</span>
        {!compact && <span>{cur.native}</span>}
        <span style={{ fontFamily: "'Geist Mono', monospace", fontSize: 9, color: muted, letterSpacing: "0.08em" }}>{cur.code.toUpperCase()}</span>
        <span style={{ color: muted, fontSize: 9 }}>▾</span>
      </button>
      {open && (
        <div style={{ position: "absolute", top: "calc(100% + 8px)", right: 0, width: 268, background: bg, border: `1px solid ${bd}`, borderRadius: 14, boxShadow: "0 18px 50px rgba(8,11,24,0.28)", overflow: "hidden", zIndex: 9000 }}>
          <div style={{ padding: 10, borderBottom: `1px solid ${bd}` }}>
            <input autoFocus value={q} onChange={e => setQ(e.target.value)} placeholder={GKtranslate("Search…", lang) || "Search…"} style={{ width: "100%", padding: "8px 11px", borderRadius: 8, border: `1px solid ${bd}`, background: dark ? "#0B0F1F" : "#F5F0E6", color: fg, fontSize: 13, outline: "none", fontFamily: "inherit" }}/>
          </div>
          <div className="gk-scroll" style={{ maxHeight: 300, overflowY: "auto", padding: 6 }}>
            {list.map(l => {
              const on = l.code === lang;
              return (
                <button key={l.code} onClick={(e) => { e.stopPropagation(); setLang(l.code); GKapplyDir(l.code); setOpen(false); setQ(""); }} style={{ width: "100%", display: "flex", alignItems: "center", gap: 11, padding: "9px 11px", borderRadius: 9, border: "none", background: on ? (dark ? "#1F2949" : "#EDE6D6") : "transparent", color: fg, cursor: "pointer", textAlign: "left", fontFamily: "inherit" }}>
                  <span style={{ fontSize: 19 }}>{l.flag}</span>
                  <div style={{ flex: 1, minWidth: 0 }}>
                    <div style={{ fontSize: 13.5, fontWeight: 600 }}>{l.native}</div>
                    <div style={{ fontSize: 11, color: muted }}>{l.country} · {l.cur}</div>
                  </div>
                  {on && <span style={{ color: "#FF5A1F", fontSize: 13 }}>✓</span>}
                </button>
              );
            })}
          </div>
          <div style={{ padding: "9px 12px", borderTop: `1px solid ${bd}`, fontSize: 10.5, color: muted, display: "flex", gap: 7, alignItems: "center", lineHeight: 1.4 }}>
            <span>🌍</span> {lang === "fr" ? "Toute la plateforme s'adapte : interface, devise, sens de lecture." : GKtranslate("The whole platform adapts: interface, currency, reading direction.", lang) || "The whole platform adapts: interface, currency, reading direction."}
          </div>
        </div>
      )}
    </div>
  );
}

// init direction au chargement
try { GKapplyDir(localStorage.getItem("guidko_lang") || "fr"); } catch (e) {}

Object.assign(window, { GK_LOCALES, GK_PHRASES, GKtranslate, GKlocale, GKapplyDir, navLabel, LangSelector, GKmoney, GKcurrency, GK_RATES, GK_CUR_SYMBOL });
