// app.jsx — root for いつき建築 site

const { useEffect, useState } = React;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "palette": "paper",
  "accent": "indigo",
  "heading": "mincho",
  "heroLayout": "fullbleed",
  "verticalMessage": true,
  "noise": true
}/*EDITMODE-END*/;

function App() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [scrolled, setScrolled] = useState(false);

  // Apply palette/accent/heading to <html>
  useEffect(() => {
    const h = document.documentElement;
    h.dataset.palette = t.palette;
    h.dataset.accent = t.accent;
    h.dataset.heading = t.heading;
  }, [t.palette, t.accent, t.heading]);

  // Noise on/off
  useEffect(() => {
    document.body.classList.toggle("noise", !!t.noise);
  }, [t.noise]);

  // Sticky nav state
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 24);
    onScroll();
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);

  // Scroll progress bar
  const [progress, setProgress] = useState(0);
  useEffect(() => {
    const onScroll = () => {
      const h = document.documentElement;
      const max = h.scrollHeight - h.clientHeight;
      setProgress(max > 0 ? window.scrollY / max : 0);
    };
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);

  return (
    <React.Fragment>
      {/* Scroll progress */}
      <div style={{
        position: "fixed", top: 0, left: 0, right: 0, height: 2, zIndex: 60,
        background: "transparent", pointerEvents: "none",
      }}>
        <div style={{
          height: "100%", width: `${progress * 100}%`,
          background: "var(--accent)",
          transition: "width .12s linear",
        }} />
      </div>

      <Nav scrolled={scrolled} />
      <main>
        <Hero heroLayout={t.heroLayout} />
        <About />
        <Services />
        <Works />
        <Process />
        <Message vertical={t.verticalMessage} />
        <Voice />
        <News />
        <Company />
        <Cta />
      </main>
      <Footer />

      <TweaksPanel title="Tweaks">
        <TweakSection label="Palette" />
        <TweakRadio
          label="背景"
          value={t.palette}
          options={[
            { value: "paper", label: "紙" },
            { value: "ink",   label: "夜" },
          ]}
          onChange={(v) => setTweak("palette", v)}
        />
        <TweakRadio
          label="アクセント"
          value={t.accent}
          options={[
            { value: "indigo", label: "藍" },
            { value: "madder", label: "茜" },
            { value: "moss",   label: "苔" },
          ]}
          onChange={(v) => setTweak("accent", v)}
        />

        <TweakSection label="Typography" />
        <TweakRadio
          label="見出し書体"
          value={t.heading}
          options={[
            { value: "mincho", label: "明朝" },
            { value: "gothic", label: "ゴシック" },
          ]}
          onChange={(v) => setTweak("heading", v)}
        />

        <TweakSection label="Layout" />
        <TweakRadio
          label="ヒーロー"
          value={t.heroLayout}
          options={[
            { value: "fullbleed", label: "全幅" },
            { value: "split",     label: "二分割" },
          ]}
          onChange={(v) => setTweak("heroLayout", v)}
        />
        <TweakToggle
          label="代表挨拶 縦組"
          value={t.verticalMessage}
          onChange={(v) => setTweak("verticalMessage", v)}
        />
        <TweakToggle
          label="紙の質感"
          value={t.noise}
          onChange={(v) => setTweak("noise", v)}
        />
      </TweaksPanel>
    </React.Fragment>
  );
}

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