// Main app. Composes everything; manages tweaks; mounts the Tweaks panel.

const { useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakColor, TweakSlider, TweakToggle } = window;
const { Hero, Scan, Features, Nordic, Verified, Data, Footer, TaglineStrip, InsideApp } = window;

// Tweakable accent: stored as a hex, mapped to {--accent, --accent-deep}.
const ACCENT_PALETTES = {
  '#C4622D': { '--accent': '#C4622D', '--accent-deep': 'hsl(16 65% 36%)' },  // terracotta
  '#D69020': { '--accent': '#D69020', '--accent-deep': 'hsl(32 70% 36%)' },  // sunflower-warm
  '#5C7A60': { '--accent': '#5C7A60', '--accent-deep': 'hsl(140 28% 26%)' }, // sage-deep
  '#4E342C': { '--accent': '#4E342C', '--accent-deep': 'hsl(25 30% 18%)' },  // bark
};

function Nav({ lang, onLangChange }) {
  return (
    <div className="nav">
      <div className="wrap nav-inner">
        <a href="#" className="logo">
          <img src="assets/sprout.png" className="logo-mark" alt=""/>
          Seedling
        </a>
        <nav className="nav-links">
          <a href="#scan">{lang==='no' ? 'Skann' : 'Scan'}</a>
          <a href="#features">{lang==='no' ? 'Funksjoner' : 'Features'}</a>
          <a href="#nordic">{lang==='no' ? 'Norden' : 'Nordics'}</a>
          <a href="#verified">{lang==='no' ? 'Kvalitet' : 'Quality'}</a>
          <a href="#data">{lang==='no' ? 'Personvern' : 'Privacy'}</a>
          <div className="lang-toggle">
            <button className={lang==='no'?'on':''} onClick={()=>onLangChange('no')}>NO</button>
            <button className={lang==='en'?'on':''} onClick={()=>onLangChange('en')}>EN</button>
          </div>
        </nav>
      </div>
    </div>
  );
}

function App() {
  const [t, setT] = useTweaks(window.TWEAK_DEFAULTS);

  // Apply accent palette + grain opacity as CSS vars on <html>
  React.useEffect(() => {
    const root = document.documentElement;
    const palette = ACCENT_PALETTES[t.accent] || ACCENT_PALETTES.terracotta;
    Object.entries(palette).forEach(([k,v]) => root.style.setProperty(k, v));
    root.style.setProperty('--grain-opacity', String(t.grain));
    document.body.setAttribute('data-lang', t.language);
  }, [t.accent, t.grain, t.language]);

  return (
    <>
      <Nav lang={t.language} onLangChange={(l)=>setT('language', l)}/>
      <main>
        <Hero lang={t.language}/>
        <TaglineStrip lang={t.language}/>
        <div id="scan"><Scan lang={t.language} showPreview={t.showAppPreview}/></div>
        <div id="features"><Features lang={t.language}/></div>
        <InsideApp lang={t.language}/>
        <div id="nordic"><Nordic lang={t.language}/></div>
        <div id="verified"><Verified lang={t.language}/></div>
        <div id="data"><Data lang={t.language}/></div>
        <Footer lang={t.language}/>
      </main>

      <TweaksPanel title="Tweaks">
        <TweakSection label="Language">
          <TweakRadio
            label="Primary"
            value={t.language}
            options={[{value:'no',label:'Norsk'},{value:'en',label:'English'}]}
            onChange={(v)=>setT('language', v)}
          />
        </TweakSection>

        <TweakSection label="Accent">
          <TweakColor
            label="Color"
            value={t.accent}
            options={['#C4622D', '#D69020', '#5C7A60', '#4E342C']}
            onChange={(v)=>setT('accent', v)}
          />
        </TweakSection>

        <TweakSection label="Paper texture">
          <TweakSlider
            label="Grain"
            value={Math.round(t.grain * 100)}
            min={0} max={60} step={5} unit="%"
            onChange={(v)=>setT('grain', v / 100)}
          />
        </TweakSection>
      </TweaksPanel>
    </>
  );
}

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