/* ===== Zorky landing — app shell ===== */
const { useState, useEffect } = React;
const { Landing, LegalPage } = window;
const { useTweaks, TweaksPanel, TweakSection, TweakRadio } = window;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "theme": "light",
  "accent": "red",
  "corners": "apple"
}/*EDITMODE-END*/;

// On a fresh visit, follow the device: dark system → dark site, CIS lang → ru, es → es, else en.
const SYS_DEFAULTS = { ...TWEAK_DEFAULTS, theme: (window.detectDark && window.detectDark()) ? "dark" : "light" };

const NAV_IDS = ["features","how","cases","faq"];

/* Zorky logomark — background rect stripped, viewBox cropped tight to the glyph
   so it lines up with the wordmark; height tracks the brand font-size via em */
function Logo({ h="0.94em" }){
  return (
    <svg viewBox="1735 1755 10545 10112" style={{display:"block",height:h,width:"auto",flex:"0 0 auto"}} aria-hidden="true">
      <path fill="var(--accent)" d="M10750.62 1874.51c996.3,0 1658.34,956.38 1319.82,1890.94 -929.19,2566.11 -1842.7,5140.76 -2763.78,7710.38 -28.91,90.93 -132.89,134.63 -217.59,93.12 -69.89,-34.28 -107.5,-118.95 -76.96,-197.29l2207.58 -6733.42c-359.02,125.37 -753.92,99.52 -1096.55,-66.66l-5502.73 7113.39c-51.15,66.74 -143.07,78.5 -208.61,36.52 -79.4,-50.88 -95.97,-162.47 -33.22,-234.34l5286.86 -7272.99c-260.23,-254.15 -409.33,-817.74 -300.23,-1246.76l-7281.43 3401.35c-74.39,39.2 -162.78,11.4 -204.73,-54.17 -50.81,-79.46 -19.14,-187.72 67.94,-226.72 2594.43,-1288.83 5196.39,-2567.77 7785.12,-3867.4 342.18,-171.76 715.81,-345.94 1018.51,-345.94zm-1368.13 2323.65l-2926.96 2262.02c-160.27,97.93 -285.86,-96.43 -163.63,-194.42l2905.73 -2445.51c45.45,134.67 107.92,261.49 184.86,377.91z"></path>
    </svg>
  );
}

function MenuIcon({ open }){
  return (
    <svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round">
      {open ? <g><path d="M6 6l12 12"/><path d="M18 6L6 18"/></g> : <g><path d="M4 7h16"/><path d="M4 12h16"/><path d="M4 17h16"/></g>}
    </svg>
  );
}

function LangSeg({ lng, setLng }){
  return (
    <div className="seg lang">
      {["ru","en","es"].map(l=>(
        <button key={l} className={lng===l?"on":""} onClick={()=>setLng(l)}>{l}</button>
      ))}
    </div>
  );
}
function ThemeSeg({ theme, setTheme }){
  return (
    <div className="seg theme">
      {[["light","☀"],["dark","☾"]].map(([v,g])=>(
        <button key={v} className={theme===v?"on":""} title={v} onClick={()=>setTheme(v)}>{g}</button>
      ))}
    </div>
  );
}

function App(){
  const [tw, setTweak] = useTweaks(SYS_DEFAULTS);
  const [page, setPage] = useState("landing");
  const [lng, setLng] = useState(() => (window.detectLang ? window.detectLang() : "ru"));
  const [menu, setMenu] = useState(false);
  window.__lang = lng;
  const t = window.makeT(lng);

  useEffect(()=>{
    const b = document.body;
    b.classList.toggle("dark", tw.theme==="dark");
    b.classList.toggle("mono", tw.accent==="mono");
    b.classList.toggle("sharp", tw.corners==="sharp");
  }, [tw]);

  // reveal-on-scroll
  useEffect(()=>{
    const obs = new IntersectionObserver((es)=>es.forEach(e=>{
      if(e.isIntersecting){ e.target.classList.add("in"); obs.unobserve(e.target); }
    }), { threshold:0.12, rootMargin:"0px 0px -8% 0px" });
    document.querySelectorAll(".reveal:not(.in)").forEach(el=>obs.observe(el));
    return ()=>obs.disconnect();
  }, [page, lng]);

  // keep <html lang> and document title in sync with the active language (SEO/GEO)
  useEffect(()=>{
    const titles = {
      ru:"Зоркий — offline-first инвентарь вещей для iOS и Android",
      en:"Zorky — offline-first inventory for your things · iOS & Android",
      es:"Zorky — inventario offline-first para tus cosas · iOS y Android"
    };
    document.documentElement.lang = lng;
    document.title = titles[lng] || titles.ru;
  }, [lng]);

  const setTheme = (v)=>setTweak("theme", v);
  const goTo = (id)=>{
    setMenu(false);
    const doScroll = ()=>{ const el=document.getElementById(id); if(el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 66, behavior:"smooth" }); };
    if(page!=="landing"){ setPage("landing"); setTimeout(doScroll, 90); } else doScroll();
  };
  const home  = ()=>{ setMenu(false); setPage("landing"); window.scrollTo({top:0, behavior:"smooth"}); };
  const terms = ()=>{ setMenu(false); setPage("terms"); window.scrollTo({top:0}); };
  const privacy = ()=>{ setMenu(false); setPage("privacy"); window.scrollTo({top:0}); };

  const nav = t("nav");

  return (
    <React.Fragment>
      <ShotPreloader/>
      <header className="site">
        <div className="wrap bar">
          <div className="brand" onClick={home}><Logo/><span>{window.brand()}<span className="dot">.</span></span></div>
          <nav className="main">
            {page==="landing" && nav.map((n,i)=>(
              <a key={i} href="#" onClick={e=>{e.preventDefault(); goTo(NAV_IDS[i]);}}>{n}</a>
            ))}
          </nav>
          <LangSeg lng={lng} setLng={setLng} />
          <ThemeSeg theme={tw.theme} setTheme={setTheme} />
          <button className="menu-btn" onClick={()=>setMenu(m=>!m)} aria-label="menu"><MenuIcon open={menu}/></button>
        </div>
      </header>

      <div className={"sheet"+(menu?" open":"")}>
        {nav.map((n,i)=>(
          <a key={i} href="#" onClick={e=>{e.preventDefault(); goTo(NAV_IDS[i]);}}>{n}</a>
        ))}
        <a href="#" onClick={e=>{e.preventDefault(); terms();}}>{t("terms")}</a>
        <a href="#" onClick={e=>{e.preventDefault(); privacy();}}>{t("privacy")}</a>
        <div className="ctrls">
          <LangSeg lng={lng} setLng={setLng} />
          <ThemeSeg theme={tw.theme} setTheme={setTheme} />
        </div>
      </div>

      {page==="landing"
        ? <Landing t={t} onTerms={terms} onPrivacy={privacy} onNav={goTo} />
        : <LegalPage key={page} t={t} doc={page} onTerms={terms} onPrivacy={privacy} onNav={goTo} />}

      <TweaksPanel>
        <TweakSection label="Оформление" />
        <TweakRadio label="Тема" value={tw.theme} options={["light","dark"]} onChange={v=>setTweak("theme", v)} />
        <TweakRadio label="Акцент" value={tw.accent} options={["red","mono"]} onChange={v=>setTweak("accent", v)} />
        <TweakRadio label="Скругления" value={tw.corners} options={["apple","sharp"]} onChange={v=>setTweak("corners", v)} />
      </TweaksPanel>
    </React.Fragment>
  );
}

ReactDOM.createRoot(document.getElementById("root")).render(<App />);
window.Logo = Logo;
