// src/app.jsx — composes everything and wires Tweaks

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "palette": "warm",
  "fontSize": 15,
  "navStyle": "glass",
  "heroVariant": "A",
  "insightDensity": "3-col"
}/*EDITMODE-END*/;

function App() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [booking, setBooking] = React.useState(false);
  const visibility = window.DATA.moduleVisibility || {};
  const show = (key) => visibility[key] !== false;

  // Apply palette to <html>
  React.useEffect(() => {
    document.documentElement.setAttribute("data-theme", t.palette);
  }, [t.palette]);

  React.useEffect(() => {
    document.documentElement.style.setProperty("--base-fs", t.fontSize + "px");
    document.body.style.fontSize = t.fontSize + "px";
  }, [t.fontSize]);

  // Body class for insight density (toggles grid columns)
  React.useEffect(() => {
    document.body.dataset.insightDensity = t.insightDensity;
  }, [t.insightDensity]);

  // Hero copy variants
  const heroVariants = {
    A: [
      "把AI从概念变成", { em: "项目" }, "，", { br: true },
      "从项目变成", { em: "收入" }, "。"
    ],
    B: [
      "战略是老板的，", { br: true },
      "执行是", { em: "AI" }, "的。"
    ],
    C: [
      "在AI泡沫和", { em: "实战" }, "之间，", { br: true },
      "我选择实战。"
    ],
  };
  React.useEffect(() => {
    window.DATA.hero.title = heroVariants[t.heroVariant] || heroVariants.A;
  }, [t.heroVariant]);

  const onBook = () => setBooking(true);
  const onJump = (id) => {
    const el = document.getElementById(id);
    if (el) window.scrollTo({ top: el.offsetTop - 30, behavior: "smooth" });
  };

  return (
    <>
      {show("nav") && <Nav onBook={onBook} />}
      {show("hero") && <Hero onBook={onBook} />}
      {show("preview") && <PreviewWall onBook={onBook} onJump={onJump} />}
      {show("about") && <About />}
      {show("thinking") && <Thinking />}
      {show("services") && <Services onBook={onBook} />}
      {show("works") && <Works />}
      {show("contact") && <Contact onBook={onBook} />}
      {show("footer") && <Footer />}
      {show("smartCta") && <SmartCTA onBook={onBook} />}
      <BookingModal open={booking} onClose={() => setBooking(false)} />
      <Effects />

      <TweaksPanel title="Tweaks · 主页">
        <TweakSection label="主题">
          <TweakColor label="配色"
            value={t.palette === "warm" ? ["#f7f3eb", "#1a1814", "#a8431f"]
                 : t.palette === "night" ? ["#0f0f10", "#e8e6e1", "#d4a574"]
                 : ["#fafaf7", "#1c1c1c", "#c8462c"]}
            options={[
              ["#f7f3eb", "#1a1814", "#a8431f"],
              ["#0f0f10", "#e8e6e1", "#d4a574"],
              ["#fafaf7", "#1c1c1c", "#c8462c"],
            ]}
            onChange={(o) => {
              const name = o[0] === "#f7f3eb" ? "warm" : o[0] === "#0f0f10" ? "night" : "vermilion";
              setTweak("palette", name);
            }} />
        </TweakSection>

        <TweakSection label="排版">
          <TweakSlider label="正文字号" value={t.fontSize} min={13} max={18} unit="px"
            onChange={(v) => setTweak("fontSize", v)} />
        </TweakSection>

        <TweakSection label="首页">
          <TweakRadio label="Hero 标语" value={t.heroVariant}
            options={[
              { value: "A", label: "A" },
              { value: "B", label: "B" },
              { value: "C", label: "C" },
            ]}
            onChange={(v) => setTweak("heroVariant", v)} />
        </TweakSection>

        <TweakSection label="THINKING">
          <TweakRadio label="Insights 密度" value={t.insightDensity}
            options={[
              { value: "2-col", label: "宽" },
              { value: "3-col", label: "中" },
              { value: "4-col", label: "紧" },
            ]}
            onChange={(v) => setTweak("insightDensity", v)} />
        </TweakSection>
      </TweaksPanel>

      <style>{`
        body[data-insight-density="2-col"] .insights-grid { grid-template-columns: repeat(2, 1fr); }
        body[data-insight-density="3-col"] .insights-grid { grid-template-columns: repeat(3, 1fr); }
        body[data-insight-density="4-col"] .insights-grid { grid-template-columns: repeat(4, 1fr); }
        @media (max-width: 960px) { body[data-insight-density="4-col"] .insights-grid { grid-template-columns: repeat(2, 1fr); } }
        @media (max-width: 600px) { body[data-insight-density] .insights-grid { grid-template-columns: 1fr; } }
      `}</style>
    </>
  );
}

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