/* === I18N — three-language support: ru / en / ky ===
   - useLang() — current language hook (persisted in localStorage)
   - t(key)    — looks up a string in DICT
   - tr({ru, en, ky}) — inline three-value picker
   - <LangSwitcher /> — dropdown in nav
*/

const I18N_LANGS = [
  { id: "ru", label: "RU", full: "Русский" },
  { id: "en", label: "EN", full: "English" },
  { id: "ky", label: "KY", full: "Кыргызча" },
];
window.I18N_LANGS = I18N_LANGS;

const LANG_KEY = "allion_lang";

function readLang() {
  try {
    const v = localStorage.getItem(LANG_KEY);
    if (v && ["ru", "en", "ky"].includes(v)) return v;
  } catch (e) {}
  return "ru";
}
function writeLang(v) {
  try { localStorage.setItem(LANG_KEY, v); } catch (e) {}
}

// Listeners for language changes (Cross-tree without context)
const LANG_LISTENERS = new Set();
let CURRENT_LANG = readLang();
function setGlobalLang(v) {
  if (!["ru", "en", "ky"].includes(v)) return;
  CURRENT_LANG = v;
  writeLang(v);
  LANG_LISTENERS.forEach((fn) => fn(v));
}

function useLang() {
  const [lang, setLangState] = React.useState(CURRENT_LANG);
  React.useEffect(() => {
    const cb = (v) => setLangState(v);
    LANG_LISTENERS.add(cb);
    return () => { LANG_LISTENERS.delete(cb); };
  }, []);
  return [lang, setGlobalLang];
}
window.useLang = useLang;
window.setGlobalLang = setGlobalLang;
window.getLang = () => CURRENT_LANG;

/* =============== DICTIONARY ===============
   Keys are dot-paths. Translations: ru / en / ky.
   Missing translations fall back to ru → en. */
const DICT = {
  "nav.services":   { ru: "Услуги",     en: "Services",     ky: "Кызматтар" },
  "nav.work":       { ru: "Продукты",   en: "Products",     ky: "Продуктулар" },
  "nav.industries": { ru: "Индустрии",  en: "Industries",   ky: "Тармактар" },
  "nav.logistics":  { ru: "Логистика",  en: "Logistics",    ky: "Логистика" },
  "nav.company":    { ru: "Компания",   en: "Company",      ky: "Компания" },
  "nav.contact":    { ru: "Связаться",  en: "Get in touch", ky: "Байланышуу" },

  "common.home":           { ru: "Главная",        en: "Home",          ky: "Башкы бет" },
  "common.learn_more":     { ru: "Подробнее",      en: "Learn more",    ky: "Толугураак" },
  "common.view_all":       { ru: "Все",            en: "View all",      ky: "Баары" },
  "common.see_all_work":   { ru: "Все продукты",   en: "All products",   ky: "Бардык продуктулар" },
  "common.read_case":      { ru: "Открыть кейс",   en: "Open case",     ky: "Кейсти ачуу" },
  "common.contact_us":     { ru: "Связаться",      en: "Contact us",    ky: "Байланышуу" },
  "common.start_project":  { ru: "Начать проект",  en: "Start a project", ky: "Долбоор баштоо" },
  "common.discuss":        { ru: "Обсудить проект", en: "Discuss a project", ky: "Долбоорду талкуулоо" },
  "common.book_call":      { ru: "Заказать звонок", en: "Book a call",  ky: "Чалууга жазылуу" },
  "common.request_quote":  { ru: "Запросить расчёт", en: "Request a quote", ky: "Эсеп сурануу" },
  "common.open_industry":  { ru: "Открыть вертикаль", en: "Open vertical", ky: "Тармакты ачуу" },
  "common.about_service":  { ru: "Подробнее об услуге", en: "About this service", ky: "Кызмат тууралуу" },
  "common.show_more":      { ru: "Показать ещё",   en: "Show more",     ky: "Көбүрөөк көрсөтүү" },
  "common.send":           { ru: "Отправить",      en: "Send",          ky: "Жөнөтүү" },
  "common.sending":        { ru: "Отправляем…",    en: "Sending…",      ky: "Жөнөтүлүүдө…" },
  "common.scroll":         { ru: "Прокрутить",     en: "Scroll",        ky: "Ылдый түшүү" },

  "footer.services":   { ru: "Услуги",       en: "Services",   ky: "Кызматтар" },
  "footer.industries": { ru: "Индустрии",    en: "Industries", ky: "Тармактар" },
  "footer.company":    { ru: "Компания",     en: "Company",    ky: "Компания" },
  "footer.about":      { ru: "О нас",        en: "About",      ky: "Биз тууралуу" },
  "footer.contacts":   { ru: "Контакты",     en: "Contacts",   ky: "Байланыштар" },
  "footer.logistics":  { ru: "Логистика и поставки", en: "Logistics & supply", ky: "Логистика жана камсыздоо" },
  "footer.rights":     { ru: "Все права защищены.", en: "All rights reserved.", ky: "Бардык укуктар корголгон." },
  "footer.accepting":  { ru: "Принимаем новые запросы", en: "Accepting new requests", ky: "Жаңы өтүнүчтөрдү кабыл алабыз" },

  /* ============ HERO ============ */
  "hero.badge":   { ru: "World-Class AI & Technology Solutions", en: "World-Class AI & Technology Solutions", ky: "Дүйнөлүк деңгээлдеги AI чечимдер" },
  "hero.line1":   { ru: "Переопределяем",  en: "Redefining",      ky: "Өзгөртөбүз" },
  "hero.line3":   { ru: "для бизнеса.",    en: "For Business.",   ky: "бизнес үчүн." },
  "hero.word1":   { ru: "Интеллект.",      en: "Intelligence.",   ky: "Интеллект." },
  "hero.word2":   { ru: "Автоматизация.",  en: "Automation.",     ky: "Автоматташтыруу." },
  "hero.word3":   { ru: "Инновация.",      en: "Innovation.",     ky: "Инновация." },
  "hero.word4":   { ru: "Будущее.",        en: "Future.",         ky: "Келечек." },
  "hero.lead":    {
    ru: "От AI-ассистентов и интеллектуальной автоматизации до платформ нового поколения и умных пространств.",
    en: "From AI assistants and intelligent automation to next-generation platforms and smart living environments.",
    ky: "AI-жардамчылардан жана интеллектуалдык автоматташтыруудан баштап жаңы муундагы платформаларга жана акылдуу мейкиндиктерге чейин.",
  },
  "hero.cta_services": { ru: "Изучить услуги", en: "Explore services", ky: "Кызматтарды кароо" },
  "hero.cta_work":     { ru: "Смотреть продукты", en: "View products",  ky: "Продуктуларды көрүү" },
  "hero.stat_projects":{ ru: "Выпущенных продуктов", en: "Products shipped", ky: "Чыгарылган продуктулар" },
  "hero.stat_countries":{ ru: "Стран присутствия",     en: "Countries served",   ky: "Өлкөлөр" },
  "hero.stat_uptime":  { ru: "Uptime SLA",             en: "Uptime SLA",         ky: "Uptime SLA" },

  /* ============ HOME SECTIONS ============ */
  "home.services.tag":     { ru: "Что мы делаем", en: "What we do", ky: "Биз эмне кылабыз" },
  "home.services.title1":  { ru: "Технологии, которые",     en: "Technology that",            ky: "Технологиялар," },
  "home.services.title2":  { ru: "формируют завтра",        en: "shapes tomorrow",             ky: "келечекти калыптандырат" },
  "home.services.lead":    {
    ru: "Пять направлений next-generation технологий — каждое спроектировано к высочайшему стандарту инженерии и эстетики.",
    en: "Five directions of next-generation technology — each engineered to the highest standard of craft and aesthetics.",
    ky: "Заманбап технологиялардын беш багыты — ар бири эң жогорку инженердик жана эстетикалык стандартта.",
  },
  "home.services.scene_badge":   { ru: "Активная система",   en: "Live system",   ky: "Иштеп жаткан система" },
  "home.services.scene_title":   { ru: "Всё работает в одной экосистеме", en: "Everything in one ecosystem", ky: "Баары бир экосистемада иштейт" },
  "home.services.scene_sub":     { ru: "Пять направлений · один технологический фундамент · персональный партнёр", en: "Five directions · one technical foundation · personal partner", ky: "Беш багыт · бирдиктүү технологиялык база · жеке өнөктөш" },

  "home.work.tag":     { ru: "Наши продукты",    en: "Our products",  ky: "Биздин продуктулар" },
  "home.work.title1":  { ru: "Продукты, которые", en: "Products that",  ky: "Продуктулар" },
  "home.work.title2":  { ru: "определяют стандарт", en: "set the standard", ky: "стандартты аныкташат" },

  "home.supply.tag":     { ru: "Global Supply Chain", en: "Global Supply Chain", ky: "Глобалдык логистика" },
  "home.supply.title1":  { ru: "От factory до",       en: "From factory to",      ky: "Заводдон" },
  "home.supply.title2":  { ru: "вашего порога",       en: "your doorstep",        ky: "сиздин эшикке чейин" },
  "home.supply.lead":    {
    ru: "Лицензированный международный коммерческий оператор — от одного GPU-сервера до полного дата-центра. Sourcing, customs, last-mile в одном контракте.",
    en: "Licensed international commercial operator — from a single GPU server to a full data centre. Sourcing, customs and last-mile in one contract.",
    ky: "Лицензиялуу эл аралык коммерциялык оператор — бир GPU-серверден баштап, толук дата борборуна чейин. Бирдиктүү келишимде.",
  },
  "home.supply.cta_title": { ru: "Нужно сложное оборудование с доставкой?", en: "Need complex equipment delivered?", ky: "Татаал жабдууну жеткирүү керекпи?" },
  "home.supply.cta_lead":  {
    ru: "Один GPU-сервер или полный data center build-out — sourcing, customs, logistics, last-mile под одним контрактом.",
    en: "A single GPU server or full data-centre build-out — sourcing, customs, logistics, last-mile under one contract.",
    ky: "Бир GPU-сервер же толук дата-борбор — бирдиктүү келишимде.",
  },
  "home.supply.cta_btn":   { ru: "Все о логистике",  en: "About logistics",  ky: "Логистика тууралуу" },

  "home.industries.tag":    { ru: "Индустрии",        en: "Industries",        ky: "Тармактар" },
  "home.industries.title1": { ru: "Глубокая экспертиза в", en: "Deep expertise in", ky: "Терең тажрыйба" },
  "home.industries.title2": { ru: "регулируемых сегментах", en: "regulated segments", ky: "жөнгө салынган тармактарда" },

  "home.cta.badge":   { ru: "Готовы начать?", en: "Ready to start?", ky: "Баштоого даярсызбы?" },
  "home.cta.title1":  { ru: "Построим что-то",  en: "Let's build something", ky: "Кошо куралы" },
  "home.cta.title2":  { ru: "экстраординарное", en: "extraordinary",         ky: "өзгөчө нерсе" },
  "home.cta.lead":    {
    ru: "Расскажите про задачу — мы вернёмся с архитектурным мнением и оценкой сроков в течение 24 часов.",
    en: "Tell us about your task — we'll come back with an architecture opinion and timing estimate within 24 hours.",
    ky: "Тапшырманы айтып бериңиз — 24 саат ичинде архитектуралык пикир жана убакыт болжолу менен кайтабыз.",
  },

  /* ============ SECTION TAGS (common) ============ */
  "tag.what_we_do":     { ru: "Что мы делаем",      en: "What we do",      ky: "Биз эмне кылабыз" },
  "tag.selected_work":  { ru: "Избранные работы",   en: "Selected work",   ky: "Тандалган долбоорлор" },
  "tag.industries":     { ru: "Индустрии",          en: "Industries",      ky: "Тармактар" },
  "tag.supply_chain":   { ru: "Global Supply Chain", en: "Global Supply Chain", ky: "Глобалдык логистика" },
  "tag.case_study":     { ru: "Case study",          en: "Case study",     ky: "Кейс" },
  "tag.about_us":       { ru: "О компании",         en: "About us",        ky: "Биз тууралуу" },
  "tag.our_principles": { ru: "Что для нас важно",  en: "What matters",    ky: "Биз үчүн маанилүү" },
  "tag.history":        { ru: "История",            en: "History",         ky: "Тарых" },
  "tag.where_we_are":   { ru: "Где мы есть",        en: "Where we are",    ky: "Биз кайда" },
  "tag.work_with_us":   { ru: "Работа с нами",      en: "Work with us",    ky: "Биз менен иштешүү" },
  "tag.why_us":         { ru: "Почему мы",          en: "Why us",          ky: "Эмне үчүн биз" },
  "tag.real_orders":    { ru: "Реальные заказы",    en: "Real orders",     ky: "Чыныгы заказдар" },
};

/* Picks correct language value from a field that's either a string or a {ru,en,ky} object. */
function tx(value, lang) {
  if (value == null) return "";
  if (typeof value === "string") return value;
  if (typeof value === "object") {
    const L = lang || CURRENT_LANG;
    return value[L] || value.ru || value.en || Object.values(value)[0] || "";
  }
  return String(value);
}
window.tx = tx;

function t(key) {
  const lang = CURRENT_LANG;
  const entry = DICT[key];
  if (!entry) return key;
  return entry[lang] || entry.ru || key;
}
window.t = t;

/* Hook variant — re-renders on language change */
function useTx() {
  const [lang] = useLang();
  return React.useCallback((value) => tx(value, lang), [lang]);
}
window.useTx = useTx;

/* Tiny helper for data files — m("ru", "en", "ky") => {ru, en, ky} */
window.m = (ru, en, ky) => ({ ru, en: en || ru, ky: ky || ru });

/* React-binding hook + helper component */
function useT() {
  const [lang] = useLang();
  return React.useCallback((key) => {
    const entry = DICT[key];
    if (!entry) return key;
    return entry[lang] || entry.ru || key;
  }, [lang]);
}
window.useT = useT;

/* Inline three-value text component */
function Tx({ ru, en, ky, children }) {
  const [lang] = useLang();
  const map = { ru, en: en || ru, ky: ky || ru };
  return <>{map[lang] || ru || children}</>;
}
window.Tx = Tx;

/* === LANG SWITCHER (use inside nav) === */
function LangSwitcher({ dark = false }) {
  const [lang, setLang] = useLang();
  const [open, setOpen] = React.useState(false);
  const wrapRef = React.useRef(null);

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

  const current = I18N_LANGS.find((l) => l.id === lang) || I18N_LANGS[0];
  const txtColor = dark ? "#fff" : "#3a3a3a";
  const borderColor = dark ? "rgba(255,255,255,0.18)" : "rgba(0,0,0,0.1)";

  return (
    <div ref={wrapRef} style={{ position: "relative" }}>
      <button
        onClick={() => setOpen(!open)}
        style={{
          padding: "7px 12px",
          borderRadius: 100,
          border: `1px solid ${borderColor}`,
          background: "transparent",
          color: txtColor,
          fontFamily: "Inter, sans-serif",
          fontSize: 12,
          fontWeight: 600,
          letterSpacing: "0.06em",
          cursor: "pointer",
          display: "inline-flex",
          alignItems: "center",
          gap: 6,
          transition: "border-color 0.2s ease, color 0.2s ease",
        }}
        onMouseEnter={(e) => { e.currentTarget.style.borderColor = "#0a6ef5"; e.currentTarget.style.color = "#0a6ef5"; }}
        onMouseLeave={(e) => { e.currentTarget.style.borderColor = borderColor; e.currentTarget.style.color = txtColor; }}
      >
        <window.I.Globe size={12} color="currentColor" />
        {current.label}
        <window.I.ChevronDown size={11} color="currentColor" style={{ transform: open ? "rotate(180deg)" : "none", transition: "transform 0.2s ease" }} />
      </button>
      {open && (
        <div style={{
          position: "absolute",
          top: "calc(100% + 8px)",
          right: 0,
          background: "#ffffff",
          border: "1px solid rgba(0,0,0,0.06)",
          borderRadius: 12,
          padding: 6,
          minWidth: 160,
          boxShadow: "0 20px 60px rgba(0,0,0,0.14)",
          zIndex: 200,
          animation: "fade-in-up 0.2s ease both",
        }}>
          {I18N_LANGS.map((l) => {
            const active = lang === l.id;
            return (
              <button
                key={l.id}
                onClick={() => { setLang(l.id); setOpen(false); }}
                style={{
                  width: "100%",
                  display: "flex",
                  justifyContent: "space-between",
                  alignItems: "center",
                  padding: "9px 12px",
                  borderRadius: 8,
                  background: active ? "rgba(10,110,245,0.08)" : "transparent",
                  color: active ? "#0a6ef5" : "#3a3a3a",
                  fontSize: 13,
                  fontWeight: active ? 600 : 500,
                  cursor: "pointer",
                  border: "none",
                  textAlign: "left",
                  transition: "background 0.15s ease",
                }}
                onMouseEnter={(e) => { if (!active) e.currentTarget.style.background = "rgba(0,0,0,0.04)"; }}
                onMouseLeave={(e) => { if (!active) e.currentTarget.style.background = "transparent"; }}
              >
                <span style={{ fontWeight: 600 }}>{l.label}</span>
                <span style={{ fontSize: 12, color: active ? "#0a6ef5" : "#7a7a7a" }}>{l.full}</span>
              </button>
            );
          })}
        </div>
      )}
    </div>
  );
}
window.LangSwitcher = LangSwitcher;

/* === SAFETY NET: auto-unwrap {ru,en,ky} i18n objects passed as React children.
   Some data fields are i18n bundles produced by m(); if a component renders
   them directly without window.tx(), React throws "Objects are not valid as
   a React child". Wrap React.createElement once so any such child is mapped
   through tx() automatically. Idempotent — guarded against double-patching. */
(function patchCreateElementForI18n() {
  if (React.__i18nPatched) return;
  const orig = React.createElement;
  const isI18n = (c) =>
    c && typeof c === "object" && !Array.isArray(c) && !React.isValidElement(c)
    && (Object.prototype.hasOwnProperty.call(c, "ru")
        || Object.prototype.hasOwnProperty.call(c, "en")
        || Object.prototype.hasOwnProperty.call(c, "ky"))
    && (typeof c.ru === "string" || typeof c.en === "string" || typeof c.ky === "string");
  const unwrap = (c) => (isI18n(c) ? tx(c) : c);
  React.createElement = function (type, props) {
    const len = arguments.length;
    if (len <= 2) return orig.apply(React, arguments);
    const args = new Array(len);
    args[0] = type;
    args[1] = props;
    for (let i = 2; i < len; i++) {
      const ch = arguments[i];
      args[i] = Array.isArray(ch) ? ch.map(unwrap) : unwrap(ch);
    }
    return orig.apply(React, args);
  };
  React.__i18nPatched = true;
})();
