/* global React, ReactDOM, useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakToggle, TweakColor, TweakSlider */

// ── Defaults block ────────────────────────────────────────────────────────
// Persistence happens via the host: when the user changes a tweak, the host
// rewrites the JSON between the EDITMODE markers in this file so the new
// value sticks across reloads. Keep the block as VALID JSON.

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "density": "spacious",
  "motion": "cinematic",
  "accent": "purple",
  "heroParallax": true,
  "magnetic": true,
  "logoStyle": "grid",
  "showBridge": true,
  "showPipeline": false,
  "showCapabilities": false,
  "showProjects": true,
  "showNews": false
}/*EDITMODE-END*/;

// Map the accent radio value → CSS palette name applied to <body>
const ACCENT_OPTIONS = ['purple', 'amber', 'coral', 'emerald', 'ink-mono'];
const ACCENT_SWATCH = {
  purple:   ['#B026F0', '#F4EEE0'],
  amber:    ['#FFB547', '#F4EEE0'],
  coral:    ['#FF5B2E', '#F4EEE0'],
  emerald:  ['#1F8A5B', '#F4EEE0'],
  'ink-mono': ['#1F0A4C', '#F4EEE0'],
};

// Tiny side-effect hook — re-applies <body data-*> attrs whenever a tweak changes.
function useBodyAttrs(t) {
  React.useEffect(() => {
    const b = document.body;
    b.dataset.density      = t.density;
    b.dataset.motion       = t.motion;
    b.dataset.accent       = t.accent === 'purple' ? '' : t.accent;
    b.dataset.heroParallax = t.heroParallax ? 'true' : 'false';
    b.dataset.magnetic     = t.magnetic ? 'true' : 'false';
    b.dataset.logos        = t.logoStyle;
    b.dataset.showBridge       = t.showBridge ? 'true' : 'false';
    b.dataset.showPipeline     = t.showPipeline ? 'true' : 'false';
    b.dataset.showCapabilities = t.showCapabilities ? 'true' : 'false';
    b.dataset.showProjects     = t.showProjects ? 'true' : 'false';
    b.dataset.showNews         = t.showNews ? 'true' : 'false';
  }, [t]);
}

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

  return (
    <TweaksPanel title="Pretencify · Tweaks">
      <TweakSection label="Ritme">
        <TweakRadio  label="Dichtheid" value={t.density}
                     options={['compact', 'spacious', 'cinematic']}
                     onChange={(v) => setTweak('density', v)} />
        <TweakRadio  label="Beweging" value={t.motion}
                     options={['calm', 'dynamic', 'cinematic']}
                     onChange={(v) => setTweak('motion', v)} />
      </TweakSection>

      <TweakSection label="Hero">
        <TweakToggle label="Parallax tilt" value={t.heroParallax}
                     onChange={(v) => setTweak('heroParallax', v)} />
        <TweakToggle label="Magnetic CTA" value={t.magnetic}
                     onChange={(v) => setTweak('magnetic', v)} />
      </TweakSection>

      <TweakSection label="Kleur">
        <TweakColor  label="Accent" value={ACCENT_SWATCH[t.accent]}
                     options={ACCENT_OPTIONS.map((a) => ACCENT_SWATCH[a])}
                     onChange={(palette) => {
                       const match = ACCENT_OPTIONS.find(
                         (a) => JSON.stringify(ACCENT_SWATCH[a]) === JSON.stringify(palette)
                       );
                       if (match) setTweak('accent', match);
                     }} />
      </TweakSection>

      <TweakSection label="Logo-strip">
        <TweakRadio label="Stijl" value={t.logoStyle}
                    options={['grid', 'marquee']}
                    onChange={(v) => setTweak('logoStyle', v)} />
      </TweakSection>

      <TweakSection label="Secties">
        <TweakToggle label="Bridge (10% / 70%)"  value={t.showBridge}
                     onChange={(v) => setTweak('showBridge', v)} />
        <TweakToggle label="Pipeline-diagram"    value={t.showPipeline}
                     onChange={(v) => setTweak('showPipeline', v)} />
        <TweakToggle label="4 beats grid"        value={t.showCapabilities}
                     onChange={(v) => setTweak('showCapabilities', v)} />
        <TweakToggle label="Uitgelichte projecten" value={t.showProjects}
                     onChange={(v) => setTweak('showProjects', v)} />
        <TweakToggle label="Latest news"         value={t.showNews}
                     onChange={(v) => setTweak('showNews', v)} />
      </TweakSection>
    </TweaksPanel>
  );
}

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