// ─────────────────────────────────────────────────────────────
// Mezoo — App root + Tweaks panel
// Tweaks defaults: aéré · vifs · titres affirmés · medium brass.
// Updates flow through useTweaks → <html data-*> attrs, which the
// CSS in mezoo-app/styles.css reads to retune the entire system.
// ─────────────────────────────────────────────────────────────

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "density": "spacious",
  "typescale": "1",
  "radius": "hairline",
  "accent": "medium",
  "theme": "light"
}/*EDITMODE-END*/;

function MezooApp() {
  const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS);

  // Restore theme from localStorage (separate from tweaks because the
  // top-bar toggle owns it day-to-day; the tweak below is just an override).
  React.useLayoutEffect(() => {
    let initialTheme = tweaks.theme;
    try {
      const stored = localStorage.getItem('mezoo.theme');
      if (stored) initialTheme = stored;
    } catch {}
    document.documentElement.dataset.theme = initialTheme;
  }, []);

  const [theme, setTheme] = useTheme();

  // Reflect tweak choices onto <html> data-attrs the CSS reads.
  React.useEffect(() => {
    const r = document.documentElement;
    r.dataset.density = tweaks.density;
    r.dataset.typescale = String(tweaks.typescale);
    r.dataset.radius = tweaks.radius;
    r.dataset.accent = tweaks.accent;
  }, [tweaks.density, tweaks.typescale, tweaks.radius, tweaks.accent]);

  const { page } = useRouterFromHash();

  return (
    <RouterProvider>
      <TopBar theme={theme} setTheme={setTheme} />
      <PageOutlet />
      <Footer />

      <TweaksPanel title="Tweaks · Mezoo">
        <TweakSection label="Densité du layout">
          <TweakRadio label="Espacement" value={tweaks.density}
            options={[
              { value: 'compact', label: 'Compact' },
              { value: 'cozy', label: 'Standard' },
              { value: 'spacious', label: 'Aéré' },
            ]}
            onChange={(v) => setTweak('density', v)} />
        </TweakSection>

        <TweakSection label="Échelle typographique">
          <TweakRadio label="Impact des titres" value={tweaks.typescale}
            options={[
              { value: '-1', label: 'Lisible' },
              { value: '0', label: 'Standard' },
              { value: '1', label: 'Affirmé' },
            ]}
            onChange={(v) => setTweak('typescale', v)} />
        </TweakSection>

        <TweakSection label="Géométrie">
          <TweakRadio label="Arrondis" value={tweaks.radius}
            options={[
              { value: 'sharp', label: 'Angles vifs (0px)' },
              { value: 'hairline', label: 'Très fin (2px)' },
              { value: 'soft', label: 'Doux (6px)' },
              { value: 'round', label: 'Arrondi (12px)' },
            ]}
            onChange={(v) => setTweak('radius', v)} />
        </TweakSection>

        <TweakSection label="Accent de marque">
          <TweakRadio label="Intensité du laiton" value={tweaks.accent}
            options={[
              { value: 'low', label: 'Sobre' },
              { value: 'medium', label: 'Standard' },
              { value: 'high', label: 'Affirmé' },
            ]}
            onChange={(v) => setTweak('accent', v)} />
        </TweakSection>

        <TweakSection label="Thème">
          <TweakRadio label="Mode d'affichage" value={theme}
            options={[
              { value: 'light', label: 'Clair' },
              { value: 'dark', label: 'Sombre' },
            ]}
            onChange={setTheme} />
        </TweakSection>
      </TweaksPanel>
    </RouterProvider>
  );
}

// Quick wrapper so the outlet picks the right page from the router context.
function PageOutlet() {
  const { page } = useRouter();
  if (page === 'case') return <CasePage />;
  if (page === 'contact') return <ContactPage />;
  if (page === 'manifeste') return <ManifestePage />;
  if (page === 'legal') return <LegalPage />;
  return <HomePage />;
}

// Compat alias — early version of the app called this name; keep it
// so handcoded preview scripts don't break.
function useRouterFromHash() {
  const [page, setPage] = React.useState(() => location.hash.replace('#', '') || 'home');
  React.useEffect(() => {
    const onHash = () => setPage(location.hash.replace('#', '') || 'home');
    window.addEventListener('hashchange', onHash);
    return () => window.removeEventListener('hashchange', onHash);
  }, []);
  return { page };
}

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