/* global React, LogoMark, OrbitGraphic, RingBehind, Icon */
// ===== Books In The Loop — Nav + 3 Hero directions =====
const { useEffect: useEffectH, useState: useStateH } = React;

function Nav({ onNav }) {
  const [stuck, setStuck] = useStateH(false);
  useEffectH(() => {
    const onScroll = () => setStuck(window.scrollY > 40);
    onScroll();
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  const go = (id) => (e) => { e.preventDefault(); onNav(id); };
  return (
    <header className={"nav" + (stuck ? " is-stuck" : "")}>
      <div className="nav__inner">
        <div className="nav__logo" onClick={go("top")}>
          <LogoMark size={36} dot="#d3a253" />
          <div className="name">Books in the Loop<small>BUSINESS BOOKKEEPING</small></div>
        </div>
        <nav className="nav__links">
          <a href="#services" onClick={go("services")}>Services</a>
          <a href="#process" onClick={go("process")}>How it works</a>
          <a href="#why" onClick={go("why")}>Why us</a>
          <a href="#about" onClick={go("about")}>About</a>
        </nav>
        <div className="nav__cta">
          <a href="#contact" onClick={go("contact")} style={{ fontSize: 14.5, fontWeight: 500, opacity: .85 }}>Contact</a>
          <button className="btn btn--gold" onClick={go("contact")}>Book a free call</button>
        </div>
      </div>
    </header>
  );
}

const HeroMeta = () => (
  <div className="hero__meta">
    <span><span className="dot"></span><b>QuickBooks &amp; Xero</b> fluent</span>
    <span><span className="dot"></span>Serving <b>Monson, MA</b> &amp; remote</span>
    <span><span className="dot"></span><b>Free</b> 30-min consult</span>
  </div>
);

function HeroCtas({ onNav, ghostLabel = "See services", ghostTarget = "services" }) {
  return (
    <div className="hero__ctas">
      <button className="btn btn--gold" onClick={() => onNav("contact")}>
        Book a free consultation <Icon name="arrow" size={17} stroke="#16273f" />
      </button>
      <button className="btn btn--ghost" onClick={() => onNav(ghostTarget)}>{ghostLabel}</button>
    </div>
  );
}

// ---------- A: Editorial split ----------
function HeroEditorial({ onNav, spin }) {
  return (
    <section className="hero" id="top">
      <div className="hero__bg">
        <div className="hero__glow" style={{ width: 520, height: 520, right: "-8%", top: "6%", background: "radial-gradient(circle, rgba(211,162,83,.30), transparent 70%)" }} />
        <div className="hero__glow" style={{ width: 460, height: 460, left: "-12%", bottom: "-10%", background: "radial-gradient(circle, rgba(39,65,102,.6), transparent 70%)" }} />
        <div className="hero__grain" />
      </div>
      <div className="wrap heroA__grid">
        <div>
          <div className="eyebrow hero__eyebrow reveal in">Bookkeeping for small business</div>
          <h1 className="reveal in d1">
            Your numbers,<br />always <span className="gilt">in the loop.</span>
          </h1>
          <p className="lede hero__sub reveal in d2">
            Clean books, on-time reports, and a bookkeeper who actually picks up the phone.
            We keep the day-to-day handled so you can run the business.
          </p>
          <div className="reveal in d3"><HeroCtas onNav={onNav} /></div>
          <div className="reveal in d4"><HeroMeta /></div>
        </div>
        <div className="heroA__art reveal in d2">
          <OrbitGraphic size={440} spin={spin} />
        </div>
      </div>
    </section>
  );
}

// ---------- B: Centered statement ----------
function HeroCentered({ onNav, spin }) {
  return (
    <section className="hero" id="top">
      <div className="hero__bg">
        <div className="hero__glow" style={{ width: 600, height: 600, left: "50%", top: "44%", transform: "translate(-50%,-50%)", background: "radial-gradient(circle, rgba(211,162,83,.18), transparent 68%)" }} />
        <div className="hero__grain" />
      </div>
      <div className="wrap heroB">
        <div className="heroB__inner">
          <RingBehind size={760} spin={spin} />
          <div style={{ position: "relative", zIndex: 2, display: "grid", justifyItems: "center", gap: 26 }}>
            <div className="eyebrow eyebrow--center hero__eyebrow reveal in" style={{ marginBottom: 6 }}>Business Bookkeeping · Monson, MA</div>
            <h1 className="reveal in d1">
              Stay <span className="gilt">in the loop</span><br />on every dollar.
            </h1>
            <p className="lede reveal in d2" style={{ maxWidth: "46ch" }}>
              Accurate books, clear monthly reports, and steady financial rhythm —
              so you always know exactly where your business stands.
            </p>
            <div className="reveal in d3"><HeroCtas onNav={onNav} /></div>
            <div className="reveal in d4" style={{ display: "flex", justifyContent: "center" }}><HeroMeta /></div>
          </div>
        </div>
      </div>
    </section>
  );
}

// ---------- C: Dashboard ----------
function HeroDashboard({ onNav, spin }) {
  const [bars, setBars] = useStateH([34, 52, 44, 66, 58, 80, 72]);
  useEffectH(() => {
    const t = setTimeout(() => setBars([40, 55, 48, 70, 62, 88, 100]), 250);
    return () => clearTimeout(t);
  }, []);
  return (
    <section className="hero" id="top">
      <div className="hero__bg">
        <div className="hero__glow" style={{ width: 520, height: 520, right: "-6%", top: "0%", background: "radial-gradient(circle, rgba(211,162,83,.26), transparent 70%)" }} />
        <div className="hero__grain" />
      </div>
      <div className="wrap heroC__grid">
        <div>
          <div className="eyebrow hero__eyebrow reveal in">Modern bookkeeping</div>
          <h1 className="reveal in d1">
            Books that<br />stay <span className="gilt">in the loop.</span>
          </h1>
          <p className="lede hero__sub reveal in d2">
            We handle reconciliation, payroll, invoicing and reporting on a dependable monthly
            cadence — and hand you a dashboard you can actually read.
          </p>
          <div className="reveal in d3"><HeroCtas onNav={onNav} ghostLabel="How it works" ghostTarget="process" /></div>
          <div className="reveal in d4"><HeroMeta /></div>
        </div>
        <div className="heroC__art reveal in d2">
          <div className="dash">
            <div className="dash__head">
              <div>
                <div className="dash__title">Monthly Overview</div>
                <div className="dash__sub">Books closed · May 2026</div>
              </div>
              <span className="dash__pill">Reconciled</span>
            </div>
            <div className="dash__chart">
              {bars.map((h, i) => (
                <div key={i} className={"dash__bar" + (i === bars.length - 1 ? " is-gold" : "")} style={{ height: h + "%" }} />
              ))}
            </div>
            <div className="dash__rows">
              <div className="dash__row">
                <span className="l"><span className="ic"><Icon name="report" size={13} stroke="#b8843a" /></span>Net income</span>
                <span className="v">$24,180</span>
              </div>
              <div className="dash__row">
                <span className="l"><span className="ic"><Icon name="invoice" size={13} stroke="#b8843a" /></span>Outstanding invoices</span>
                <span className="v">$3,420</span>
              </div>
              <div className="dash__row">
                <span className="l"><span className="ic"><Icon name="reconcile" size={13} stroke="#b8843a" /></span>Accounts reconciled</span>
                <span className="v">6 / 6</span>
              </div>
            </div>
            <div className="dash__float">
              <div><small>On time</small><div className="big">100%</div></div>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

function Hero({ variant, onNav, spin }) {
  if (variant === "centered") return <HeroCentered onNav={onNav} spin={spin} />;
  if (variant === "dashboard") return <HeroDashboard onNav={onNav} spin={spin} />;
  return <HeroEditorial onNav={onNav} spin={spin} />;
}

Object.assign(window, { Nav, Hero });
