// main.jsx — assembles the page, audit modal, scroll progress, tweaks
const {useState,useEffect,useRef} = React;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "displayFont": "Bricolage Grotesque",
  "driftColor": "#c4502e",
  "agreedColor": "#2f8f63",
  "motion": 100,
  "density": "regular",
  "texture": true
}/*EDITMODE-END*/;

/* fonts that can be swapped in as the display face */
const FONT_STACKS = {
  "Bricolage Grotesque": '"Bricolage Grotesque",Georgia,serif',
  "Instrument Serif": '"Instrument Serif",Georgia,serif',
  "Space Grotesk": '"Space Grotesk",system-ui,sans-serif',
};

function injectFonts(){
  if(document.getElementById("tweak-fonts")) return;
  const l=document.createElement("link");
  l.id="tweak-fonts"; l.rel="stylesheet";
  l.href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Space+Grotesk:wght@400;500;600;700&display=swap";
  document.head.appendChild(l);
}

/* ---------------------------------------------------------------- AUDIT MODAL */
function AuditModal({open,onClose}){
  const [sent,setSent]=useState(false);
  const {t}=useLang();
  useEffect(()=>{ if(open){setSent(false);document.body.style.overflow="hidden";}
    else document.body.style.overflow=""; },[open]);
  if(!open) return null;
  return (
    <div onClick={onClose} style={{position:"fixed",inset:0,zIndex:60,display:"grid",placeItems:"center",
      padding:20,background:"rgba(14,15,18,.55)",backdropFilter:"blur(6px)",
      animation:"fade .3s ease"}}>
      <div onClick={e=>e.stopPropagation()} className="card" style={{maxWidth:520,width:"100%",
        padding:"clamp(26px,4vw,40px)",boxShadow:"0 60px 120px -50px rgba(0,0,0,.6)"}}>
        {!sent ? <>
          <div style={{display:"flex",justifyContent:"space-between",alignItems:"flex-start"}}>
            <div>
              <Mono style={{fontSize:11,color:"var(--drift)",letterSpacing:".1em"}}>{t("modal.kicker")}</Mono>
              <h3 style={{fontSize:28,marginTop:10,letterSpacing:"-.02em"}}>{t("modal.title")}</h3>
            </div>
            <button onClick={onClose} aria-label="Close" style={{background:"none",border:"1px solid var(--line)",
              borderRadius:8,width:34,height:34,cursor:"pointer",fontSize:18,color:"var(--ink-2)"}}>×</button>
          </div>
          <p style={{marginTop:14,color:"var(--ink-2)",fontSize:15.5,lineHeight:1.55}}>
            {t("modal.intro")}</p>
          <form onSubmit={e=>{e.preventDefault();setSent(true);}} style={{marginTop:22,display:"grid",gap:13}}>
            <Field label={t("modal.email")} type="email" placeholder="cfo@company.fi" required/>
            <Field label={t("modal.company")} placeholder="Company Oy" required/>
            <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:13}}>
              <Field label={t("modal.role")} placeholder="CFO / Controller"/>
              <Field label={t("modal.suppliers")} placeholder="~120" type="text"/>
            </div>
            <button type="submit" className="btn btn-primary" style={{marginTop:8,justifyContent:"center",width:"100%"}}>
              {t("modal.submit")}<Arrow/></button>
            <Mono style={{fontSize:11,color:"var(--muted)",textAlign:"center"}}>
              {t("modal.disclaimer")}</Mono>
          </form>
        </> : <div style={{textAlign:"center",padding:"14px 0"}}>
          <div style={{width:64,height:64,borderRadius:64,margin:"0 auto",display:"grid",placeItems:"center",
            background:"var(--agreed-soft)"}}>
            <svg width="30" height="30" viewBox="0 0 16 16"><path d="M3 8.5L6.2 11.5L13 4.5"
              stroke="var(--agreed)" strokeWidth="1.8" fill="none" strokeLinecap="round" strokeLinejoin="round"/></svg>
          </div>
          <h3 style={{fontSize:26,marginTop:20,letterSpacing:"-.02em"}}>{t("modal.doneHeading")}</h3>
          <p style={{marginTop:12,color:"var(--ink-2)",fontSize:15.5,maxWidth:"36ch",margin:"12px auto 0"}}>
            {t("modal.doneBody")}</p>
          <button onClick={onClose} className="btn btn-ghost" style={{marginTop:24}}>{t("modal.close")}</button>
        </div>}
      </div>
    </div>
  );
}
function Field({label,...rest}){
  const inputId = React.useId();
  return <label htmlFor={inputId} style={{display:"grid",gap:6}}>
    <Mono style={{fontSize:11,color:"var(--muted)",letterSpacing:".06em"}}>{label.toUpperCase()}</Mono>
    <input id={inputId} {...rest} style={{font:"inherit",fontSize:15,padding:"12px 14px",borderRadius:10,
      border:"1px solid var(--line)",background:"var(--paper)",color:"var(--ink)",width:"100%"}}/>
  </label>;
}

/* ---------------------------------------------------------------- SCROLL PROGRESS */
function ScrollProgress(){
  const ref=useRef(null);
  useEffect(()=>{
    const on=()=>{
      const h=document.documentElement;
      const p=h.scrollTop/(h.scrollHeight-h.clientHeight||1);
      if(ref.current) ref.current.style.transform=`scaleX(${p})`;
    };
    on(); window.addEventListener("scroll",on,{passive:true});
    return()=>window.removeEventListener("scroll",on);
  },[]);
  return <div style={{position:"fixed",top:0,left:0,right:0,height:2,zIndex:40,
    background:"transparent",pointerEvents:"none"}}>
    <div ref={ref} style={{height:"100%",background:"var(--drift)",transformOrigin:"0 50%",transform:"scaleX(0)"}}/>
  </div>;
}

/* ---------------------------------------------------------------- LANG SWITCH */
function LangSwitch(){
  const {lang,setLang}=useLang();
  return (
    <div className="lang-switch" style={{display:"flex",gap:4,alignItems:"center"}}>
      {LOCALES.map(({code,flag,label})=>{
        const active=lang===code;
        return (
          <button key={code} onClick={()=>setLang(code)}
            aria-label={`Switch to ${label}`}
            aria-pressed={active}
            style={{
              display:"flex",alignItems:"center",gap:5,
              padding:"5px 9px",borderRadius:8,cursor:"pointer",
              fontSize:12.5,fontFamily:"var(--mono)",fontWeight:600,
              border:active?"1px solid var(--line)":"1px solid transparent",
              background:active?"var(--paper-2)":"transparent",
              color:active?"var(--ink)":"var(--muted)",
              transition:"all .2s ease",
            }}
            onMouseEnter={e=>{if(!active)e.currentTarget.style.color="var(--ink)"}}
            onMouseLeave={e=>{if(!active)e.currentTarget.style.color="var(--muted)"}}
          >
            <span aria-hidden="true">{flag}</span>{label}
          </button>
        );
      })}
    </div>
  );
}

/* ---------------------------------------------------------------- APP */
function App(){
  const [t,setTweak]=useTweaks(TWEAK_DEFAULTS);
  const [auditOpen,setAuditOpen]=useState(false);
  const openAudit=e=>{ if(e&&e.preventDefault)e.preventDefault(); setAuditOpen(true); };
  const [lang,setLangState]=useState(()=>localStorage.getItem("lang")||"en");
  const setLang=(l)=>{ setLangState(l); localStorage.setItem("lang",l); };
  const langT=(key)=>window.t(lang,key);
  const langCtx={lang,setLang,t:langT};

  useEffect(()=>{injectFonts();},[]);
  useEffect(()=>{
    const r=document.documentElement.style;
    r.setProperty("--display",FONT_STACKS[t.displayFont]||FONT_STACKS["Bricolage Grotesque"]);
    r.setProperty("--drift",t.driftColor);
    r.setProperty("--drift-soft",t.driftColor+"1f");
    r.setProperty("--agreed",t.agreedColor);
    r.setProperty("--agreed-soft",t.agreedColor+"1f");
    r.setProperty("--motion",(t.motion/100).toFixed(2));
    r.setProperty("--density",t.density==="compact"?"0.8":t.density==="comfy"?"1.18":"1");
    document.querySelectorAll(".texgrid").forEach(el=>el.style.opacity=t.texture?"":"0");
  },[t]);

  return (
  <LangContext.Provider value={langCtx}>
    <a href="#main-content" className="skip-link">Skip to main content</a>
    <ResponsiveCSS/>
    <ScrollProgress/>
    <Nav onAudit={openAudit}/>
    <main id="main-content">
      <Hero onAudit={openAudit}/>
      <Problem/>
      <HowItWorks/>
      <Leakage/>
      <Integrations/>
      <Pricing onAudit={openAudit}/>
      <FAQ/>
      <FinalCTA onAudit={openAudit}/>
    </main>
    <AuditModal open={auditOpen} onClose={()=>setAuditOpen(false)}/>

    <TweaksPanel>
      <TweakSection label="Type"/>
      <TweakRadio label="Display font" value={t.displayFont}
        options={["Bricolage Grotesque","Instrument Serif","Space Grotesk"]}
        onChange={v=>setTweak("displayFont",v)}/>
      <TweakSection label="Signal colors"/>
      <TweakColor label="Drift / alert" value={t.driftColor}
        options={["#c4502e","#b23b3b","#b8742a","#8a5cf0"]}
        onChange={v=>setTweak("driftColor",v)}/>
      <TweakColor label="Recovered / agreed" value={t.agreedColor}
        options={["#2f8f63","#3a7d8c","#5a8f2f","#2f6f8f"]}
        onChange={v=>setTweak("agreedColor",v)}/>
      <TweakSection label="Feel"/>
      <TweakSlider label="Motion" value={t.motion} min={0} max={140} unit="%"
        onChange={v=>setTweak("motion",v)}/>
      <TweakRadio label="Density" value={t.density} options={["compact","regular","comfy"]}
        onChange={v=>setTweak("density",v)}/>
      <TweakToggle label="Grid texture" value={t.texture} onChange={v=>setTweak("texture",v)}/>
    </TweaksPanel>
  </LangContext.Provider>);
}

/* responsive rules injected as a real <style> */
function ResponsiveCSS(){
  return <style dangerouslySetInnerHTML={{__html:`
@media (max-width:1140px){
  header .signin{display:none!important}
  header .nav-links{gap:20px!important}
}
@media (max-width:1080px){
  .hero-grid{grid-template-columns:1fr!important}
  .hero-grid>div:last-child{max-width:520px;margin-top:8px}
  .prob-grid,.int-grid,.faq-grid{grid-template-columns:1fr!important}
  .steps-grid{grid-template-columns:1fr 1fr!important}
  .leak-grid{grid-template-columns:1fr 1fr!important}
  .stat-strip{grid-template-columns:1fr 1fr!important;gap:30px!important}
  .plan-grid{grid-template-columns:1fr!important}
  .pilot-grid{grid-template-columns:1fr!important}
  .pilot-aside{border-left:0!important;border-top:1px solid var(--line-dark)!important}
  .outputs{grid-template-columns:1fr 1fr!important}
  .sources-grid{grid-template-columns:1fr 1fr!important}
}
@media (max-width:1020px){
  header .nav-links{display:none!important}
  header .lang-switch{display:none!important}
  header .nav-burger{display:flex!important}
}
@media (max-width:720px){
  header .btn-primary{display:none!important}
  .steps-grid,.leak-grid,.stat-strip{grid-template-columns:1fr!important}
  .foot-grid{grid-template-columns:1fr 1fr!important}
  .d-xl{font-size:clamp(40px,12vw,68px)!important}
}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes menu-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
`}}/>;
}

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