// MODUS — main app shell + Tweaks panel.

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "accent": "violet",
  "logoVariant": "mono",
  "lang": "nl",
  "theme": "dark",
  "heroMotion": true
}/*EDITMODE-END*/;

const App = () => {
  const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS);

  // Apply theme + accent to <html>
  React.useEffect(() => {
    document.documentElement.setAttribute('data-theme', tweaks.theme);
    document.documentElement.setAttribute('data-accent', tweaks.accent);
    document.documentElement.setAttribute('lang', tweaks.lang);
    window.__logoVariant = tweaks.logoVariant;
  }, [tweaks.theme, tweaks.accent, tweaks.lang, tweaks.logoVariant]);

  return (
    <>
      <Nav
        lang={tweaks.lang}
        setLang={(l) => setTweak('lang', l)}
        theme={tweaks.theme}
        setTheme={(t) => setTweak('theme', t)}
      />
      <main>
        <Hero lang={tweaks.lang} showMotion={tweaks.heroMotion} />
        <Approach lang={tweaks.lang} />
        <Strategy lang={tweaks.lang} />
        <Cases lang={tweaks.lang} />
        <Services lang={tweaks.lang} />
        <Pricing lang={tweaks.lang} />
        <About lang={tweaks.lang} />
        <Contact lang={tweaks.lang} />
      </main>
      <Footer lang={tweaks.lang} />

      <TweaksPanel title="Tweaks">
        <TweakSection label="Accent — vibrant">
          <TweakRadio
            label="Pick"
            value={tweaks.accent}
            onChange={(v) => setTweak('accent', v)}
            options={[
              { value: 'violet',   label: 'Violet' },
              { value: 'electric', label: 'Green' },
              { value: 'blue',     label: 'Blue' },
            ]}
          />
          <div style={{ height: 6 }} />
          <TweakRadio
            label="Calm alternates"
            value={tweaks.accent}
            onChange={(v) => setTweak('accent', v)}
            options={[
              { value: 'forest', label: 'Forest' },
              { value: 'orange', label: 'Orange' },
            ]}
          />
          <ColorSwatches accent={tweaks.accent} />
        </TweakSection>

        <TweakSection label="Logo mark">
          <TweakRadio
            label="Style"
            value={tweaks.logoVariant}
            onChange={(v) => setTweak('logoVariant', v)}
            options={[
              { value: 'wordmark', label: 'Wordmark' },
              { value: 'mono',     label: 'Block' },
              { value: 'bracket',  label: 'Bracket' },
            ]}
          />
          <div style={{ height: 6 }} />
          <TweakRadio
            label="More options"
            value={tweaks.logoVariant}
            onChange={(v) => setTweak('logoVariant', v)}
            options={[
              { value: 'slash', label: 'Slash' },
              { value: 'dot',   label: 'Dot' },
              { value: 'rings', label: 'Rings' },
            ]}
          />
          <LogoPreview variant={tweaks.logoVariant} />
        </TweakSection>

        <TweakSection label="Hero motion">
          <TweakToggle
            label="Hero background animation"
            value={tweaks.heroMotion}
            onChange={(v) => setTweak('heroMotion', v)}
          />
        </TweakSection>

        <TweakSection label="Surface">
          <TweakRadio
            label="Theme"
            value={tweaks.theme}
            onChange={(v) => setTweak('theme', v)}
            options={[
              { value: 'light', label: 'Light' },
              { value: 'dark',  label: 'Dark' },
            ]}
          />
          <div style={{ height: 6 }} />
          <TweakRadio
            label="Language"
            value={tweaks.lang}
            onChange={(v) => setTweak('lang', v)}
            options={[
              { value: 'nl', label: 'NL' },
              { value: 'en', label: 'EN' },
            ]}
          />
        </TweakSection>
      </TweaksPanel>
    </>
  );
};

// Live swatches showing the current accent + neutrals
const ColorSwatches = ({ accent }) => {
  // Re-read CSS vars after change settles
  const [vars, setVars] = React.useState({ accent: '', muted: '' });
  React.useEffect(() => {
    const id = setTimeout(() => {
      const styles = getComputedStyle(document.documentElement);
      setVars({
        accent: styles.getPropertyValue('--accent').trim(),
        muted: styles.getPropertyValue('--accent-muted').trim(),
      });
    }, 30);
    return () => clearTimeout(id);
  }, [accent]);
  return (
    <div style={{ display: 'flex', gap: 6, marginTop: 10 }}>
      <Swatch hex={vars.accent} label="accent"/>
      <Swatch hex={vars.muted} label="muted"/>
    </div>
  );
};

const Swatch = ({ hex, label }) => (
  <div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 4 }}>
    <div style={{
      height: 28,
      borderRadius: 4,
      background: hex || 'transparent',
      border: '1px solid var(--border)',
    }}/>
    <div style={{
      fontFamily: 'var(--font-mono)',
      fontSize: 10,
      color: 'var(--ink-muted)',
      letterSpacing: '0.04em',
      textTransform: 'uppercase',
    }}>{hex || label}</div>
  </div>
);

const LogoPreview = ({ variant }) => (
  <div style={{
    marginTop: 10,
    padding: 16,
    background: 'var(--bg-base)',
    border: '1px solid var(--border)',
    borderRadius: 8,
    display: 'flex',
    justifyContent: 'center',
    alignItems: 'center',
    minHeight: 64,
  }}>
    <Logo variant={variant} size={32} />
  </div>
);

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