// app.jsx - top-level Skybridge landing page

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "theme": "bold",
  "heroVariant": "founder",
  "showPricing": true
}/*EDITMODE-END*/;

function getInitialTheme() {
  try {
    const saved = localStorage.getItem("sb-theme");
    if (saved === "bold" || saved === "technical") return saved;
  } catch (e) {}
  return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "technical" : "bold";
}

function App() {
  const [t, setTweak] = useTweaks({ ...TWEAK_DEFAULTS, theme: getInitialTheme() });
  const [qfOpen, setQfOpen] = React.useState(false);

  // Apply theme to <html>, persist choice
  React.useEffect(() => {
    document.documentElement.setAttribute("data-theme", t.theme);
    try { localStorage.setItem("sb-theme", t.theme); } catch (e) {}
  }, [t.theme]);

  // Prevent dragging images (e.g. founder portrait) to another tab/window
  React.useEffect(() => {
    function onDragStart(e) {
      if (e.target instanceof HTMLImageElement) e.preventDefault();
    }
    document.addEventListener("dragstart", onDragStart);
    return () => document.removeEventListener("dragstart", onDragStart);
  }, []);

  const openQF = () => setQfOpen(true);
  const closeQF = () => setQfOpen(false);
  const toggleTheme = () => setTweak("theme", t.theme === "technical" ? "bold" : "technical");

  return (
    <>
      <Nav onCTA={openQF} theme={t.theme} onToggleTheme={toggleTheme} />
      <main>
        <Hero variant={t.heroVariant} onCTA={openQF} />
        <TrustStrip />
        <Problem />
        <Services onCTA={openQF} />
        <Process />
        <CaseStudies />
        <Pricing show={t.showPricing} onCTA={openQF} />
        <Founder onCTA={openQF} />
        <FAQ />
        <CTASection onCTA={openQF} />
      </main>
      <Footer onCTA={openQF} />

      <QualifyModal open={qfOpen} onClose={closeQF} />
      <CookieBanner />

      <TweaksPanel title="Tweaks">
        <TweakSection label="Visual direction" />
        <TweakRadio
          label="Theme"
          value={t.theme}
          options={[
            { value: "bold",      label: "Bold light" },
            { value: "technical", label: "Technical dark" },
          ]}
          onChange={(v) => setTweak("theme", v)}
        />

        <TweakSection label="Hero" />
        <TweakSelect
          label="Headline variant"
          value={t.heroVariant}
          options={[
            { value: "founder", label: "Legacy .NET to reliable Azure delivery" },
            { value: "metric", label: "We optimize pipelines for reliable delivery" },
            { value: "bridge", label: "Bridge legacy .NET to Azure" },
          ]}
          onChange={(v) => setTweak("heroVariant", v)}
        />

        <TweakSection label="Page sections" />
        <TweakToggle
          label="Show pricing section"
          value={t.showPricing}
          onChange={(v) => setTweak("showPricing", v)}
        />

        <TweakSection label="Conversion" />
        <TweakButton
          label="Open qualification form"
          onClick={openQF}
        />
      </TweaksPanel>
    </>
  );
}

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

// Reveal-on-scroll: subtle but consistent
requestAnimationFrame(() => {
  const io = new IntersectionObserver((entries) => {
    entries.forEach((e) => {
      if (e.isIntersecting) {
        e.target.classList.add("in");
        io.unobserve(e.target);
      }
    });
  }, { threshold: 0.08 });
  document.querySelectorAll(".section, .sb-svc, .sb-tier, .sb-quote, .sb-case, .sb-step")
    .forEach((el) => {
      el.classList.add("reveal");
      io.observe(el);
    });
});
