/* App root */

const App = () => {
  const defaults = window.BS_DEFAULTS || {};
  const [palette, setPalette]   = React.useState(defaults.palette   || "ink-terracotta");
  const [density, setDensity]   = React.useState(defaults.density   || "airy");
  const [headline, setHeadline] = React.useState(defaults.headline  || "The AI partner to commercial insurance brokers.");
  const [tweaksOpen, setTweaksOpen] = React.useState(false);

  React.useEffect(() => {
    document.documentElement.setAttribute("data-palette", palette);
    document.documentElement.setAttribute("data-density", density);
  }, [palette, density]);

  // Persist via edit-mode protocol
  const persist = (edits) => {
    try { window.parent.postMessage({ type: '__edit_mode_set_keys', edits }, '*'); } catch (e) {}
  };
  const onPalette = (p)  => { setPalette(p);   persist({ palette: p }); };
  const onDensity = (d)  => { setDensity(d);   persist({ density: d }); };
  const onHeadline = (h) => { setHeadline(h);  persist({ headline: h }); };

  // Edit-mode host handshake
  React.useEffect(() => {
    const onMsg = (e) => {
      const t = e.data && e.data.type;
      if (t === '__activate_edit_mode')   setTweaksOpen(true);
      if (t === '__deactivate_edit_mode') setTweaksOpen(false);
    };
    window.addEventListener('message', onMsg);
    try { window.parent.postMessage({ type: '__edit_mode_available' }, '*'); } catch (e) {}
    return () => window.removeEventListener('message', onMsg);
  }, []);

  return (
    <>
      <Nav />
      <Hero headline={headline} />
      <Marquee />
      <Stats />
      <Modules />
      <Statement />
      <Testimonial />
      <Integrations />
      <Security />
      <CTA />
      <Footer />

      <TweaksPanel
        open={tweaksOpen}
        onClose={() => setTweaksOpen(false)}
        palette={palette} setPalette={onPalette}
        density={density} setDensity={onDensity}
        headline={headline} setHeadline={onHeadline}
      />
    </>
  );
};

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