// app.jsx — Cata Haus tweaks panel
// Drives data-attributes on <html> + a CSS variable for marquee speed.

const { useEffect } = React;

function App() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);

  // Apply tweak values to <html> data-attrs + CSS vars on every change.
  useEffect(() => {
    const r = document.documentElement;
    r.setAttribute('data-palette', t.palette);
    r.setAttribute('data-display-font', t.displayFont);
    r.setAttribute('data-mode', t.dark ? 'dark' : 'light');
    r.setAttribute('data-hero', t.heroLayout);
    r.setAttribute('data-phone', t.phoneColor);
    r.style.setProperty('--marquee-duration', `${t.marqueeSpeed}s`);
    r.style.setProperty('--wordmark-scale', t.wordmarkScale);
    const wm = document.getElementById('wordmark-text');
    if (wm && wm.textContent !== t.wordmarkText) wm.textContent = t.wordmarkText;
  }, [t.palette, t.displayFont, t.dark, t.heroLayout, t.phoneColor, t.marqueeSpeed, t.wordmarkScale, t.wordmarkText]);

  return (
    <TweaksPanel title="Tweaks">
      <TweakSection label="Palette" />
      <TweakRadio
        label="Color"
        value={t.palette}
        options={[
          { value: 'bone',  label: 'Bone' },
          { value: 'terra', label: 'Terra' },
          { value: 'sage',  label: 'Sage' },
          { value: 'ink',   label: 'Ink' },
        ]}
        onChange={(v) => setTweak('palette', v)}
      />
      <TweakToggle label="Dark mode" value={t.dark} onChange={(v) => setTweak('dark', v)} />

      <TweakSection label="Type" />
      <TweakSelect
        label="Display font"
        value={t.displayFont}
        options={[
          { value: 'anton',     label: 'Anton — tall condensed' },
          { value: 'archivo',   label: 'Archivo Black — chunky' },
          { value: 'bebas',     label: 'Bebas Neue — display' },
          { value: 'helvetica', label: 'Helvetica Black' },
        ]}
        onChange={(v) => setTweak('displayFont', v)}
      />

      <TweakSection label="Hero" />
      <TweakText
        label="Title"
        value={t.wordmarkText}
        onChange={(v) => setTweak('wordmarkText', v)}
      />
      <TweakSlider
        label="Wordmark size"
        value={t.wordmarkScale}
        min={0.5} max={1.4} step={0.05}
        onChange={(v) => setTweak('wordmarkScale', v)}
      />
      <TweakRadio
        label="Layout"
        value={t.heroLayout}
        options={[
          { value: 'stack',   label: 'Stack' },
          { value: 'split',   label: 'Split' },
          { value: 'overlay', label: 'Overlay' },
        ]}
        onChange={(v) => setTweak('heroLayout', v)}
      />

      <TweakSection label="Phone" />
      <TweakRadio
        label="Bezel"
        value={t.phoneColor}
        options={[
          { value: 'black',     label: 'Black' },
          { value: 'white',     label: 'White' },
          { value: 'champagne', label: 'Champ.' },
        ]}
        onChange={(v) => setTweak('phoneColor', v)}
      />

      <TweakSection label="Motion" />
      <TweakSlider
        label="Marquee speed"
        value={t.marqueeSpeed}
        min={10} max={90} step={2}
        unit="s"
        onChange={(v) => setTweak('marqueeSpeed', v)}
      />
    </TweaksPanel>
  );
}

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