// Hero: two layouts — "split" (headline left + browser mock right) and
// "centered" (Notion-style: centered headline above, big platform screenshot below).
// Layout is driven by the [data-hero-layout] attribute on <html>, set by MxTweaks.

function Hero() {
  const [layout, setLayout] = React.useState(() =>
    document.documentElement.getAttribute("data-hero-layout") || "split"
  );
  React.useEffect(() => {
    // React to tweak changes from the panel.
    const onChange = (e) => {
      const d = e && e.detail;
      if (d && Object.prototype.hasOwnProperty.call(d, "heroLayout")) {
        setLayout(d.heroLayout || "split");
      }
    };
    window.addEventListener("tweakchange", onChange);
    // Also poll the attribute once in case it was set after first render.
    const attr = document.documentElement.getAttribute("data-hero-layout");
    if (attr && attr !== layout) setLayout(attr);
    return () => window.removeEventListener("tweakchange", onChange);
  }, []);

  return (
    <section className="mx-hero" data-layout={layout}>
      {layout === "centered" ? <HeroCentered/> : <HeroSplit/>}
    </section>
  );
}

function HeroSplit() {
  return (
    <div className="mx-container mx-hero-grid">
      <div className="mx-hero-text">
        <div className="mx-eyebrow-pill" data-reveal style={{"--reveal-delay":"0ms"}}>
          <Sparkles size={13} />
          <span>Chamber CRM × AI</span>
        </div>
        <h1 className="mx-hero-title" data-reveal style={{"--reveal-delay":"80ms"}}>
          Increase your revenue by knowing your members.
        </h1>
        <p className="mx-hero-sub" data-reveal style={{"--reveal-delay":"160ms"}}>
          memberx is the lightweight CRM for chambers and business member
          organisations — membership, billing, events, training — with an AI
          layer that tells you what your members actually need next.
        </p>
        <div className="mx-hero-cta" data-reveal style={{"--reveal-delay":"240ms"}}>
          <a className="mx-btn mx-btn-primary mx-btn-lg" href="/apply?source=hero">
            Sign up for early access <ArrowRight size={16} />
          </a>
        </div>
        <div className="mx-hero-meta" data-reveal style={{"--reveal-delay":"320ms"}}>
          <span><Sparkles size={14} /> Founding 5 · trial program</span>
          <span><Check size={14} /> Full platform, your team</span>
          <span><Check size={14} /> Hands-on migration</span>
        </div>
      </div>

      <div className="mx-hero-visual" data-reveal="lg" style={{"--reveal-delay":"200ms"}}>
        <div className="mx-browser-float">
          <HeroProductMock />
        </div>
      </div>
    </div>
  );
}

function HeroCentered() {
  return (
    <>
      <div className="mx-container mx-hero-center">
        <div className="mx-eyebrow-pill" data-reveal style={{"--reveal-delay":"0ms"}}>
          <Sparkles size={13} />
          <span>Chamber CRM × AI</span>
        </div>
        <h1 className="mx-hero-title-center" data-reveal style={{"--reveal-delay":"80ms"}}>
          Increase your revenue by knowing your members.
        </h1>
        <p className="mx-hero-sub-center" data-reveal style={{"--reveal-delay":"160ms"}}>
          The lightweight CRM for chambers and business member organisations — with
          an AI layer that tells you what your members actually need next.
        </p>
        <div className="mx-hero-cta-center" data-reveal style={{"--reveal-delay":"240ms"}}>
          <a className="mx-btn mx-btn-primary mx-btn-lg" href="/apply?source=hero">
            Sign up for early access <ArrowRight size={16} />
          </a>
        </div>
        <div className="mx-hero-meta-center" data-reveal style={{"--reveal-delay":"320ms"}}>
          <span><Sparkles size={14} /> Founding 5 · trial program</span>
          <span><Check size={14} /> Full platform, your team</span>
          <span><Check size={14} /> Hands-on migration</span>
        </div>
        <a className="mx-hero-scroll-cue" href="#product" aria-label="Scroll to product"
           data-reveal style={{"--reveal-delay":"420ms"}}>
          <ArrowDown size={14}/>
        </a>
      </div>

      <div className="mx-hero-platform" data-reveal="lg" style={{"--reveal-delay":"380ms"}}>
        <div className="mx-hero-platform-inner">
          <HeroProductMock />
        </div>
      </div>
    </>
  );
}

function HeroProductMock() {
  return (
    <div className="mx-browser">
      <div className="mx-browser-bar">
        <span className="mx-tl tl-r"></span>
        <span className="mx-tl tl-y"></span>
        <span className="mx-tl tl-g"></span>
        <div className="mx-browser-url">
          <span>app.memberx.ai</span><span>/dashboard</span>
        </div>
      </div>
      <div className="mx-browser-body">
        <aside className="mx-mini-nav">
          <div className="mx-mini-brand">
            <div className="mx-mini-mark"><span className="mx-mini-dot"></span></div>
            <span>memberx</span>
          </div>
          <div className="mx-mini-item active"><Dashboard size={14}/> Dashboard</div>
          <div className="mx-mini-item"><Users size={14}/> Members</div>
          <div className="mx-mini-item"><Calendar size={14}/> Events</div>
          <div className="mx-mini-item"><Mail size={14}/> Email</div>
          <div className="mx-mini-item"><Chart size={14}/> Reporting</div>
          <div className="mx-mini-item ai-item"><Sparkles size={14}/> Insights<span className="mx-badge-pill">4</span></div>
        </aside>
        <main className="mx-mini-main">
          <div className="mx-mini-header">
            <h3>Good morning, Sarah</h3>
            <div className="mx-mini-search"><Search size={13}/>Search</div>
          </div>

          <div className="mx-mini-stats">
            <Stat
              label="Members"
              value="1,284"
              delta="+24 MoM"
              spark={[6,7,7,8,8,9,9,10,11,11,12,13]}
            />
            <Stat
              label="Renewals"
              value="92%"
              delta="+3.1 pts"
              spark={[7,6,7,7,8,8,9,9,9,10,11,12]}
              tone="pink"
            />
            <Stat
              label="Revenue"
              value="$412k"
              delta="+12.4%"
              spark={[3,4,5,5,6,7,8,8,9,10,11,13]}
              tone="amber"
            />
          </div>

          <SectorStrip />

          <div className="mx-ai-insight">
            <div className="mx-ai-head">
              <span className="mx-ai-pill"><Sparkles size={12}/> Suggested by memberx</span>
              <span className="mx-ai-time">Updated 2h ago</span>
            </div>
            <p className="mx-ai-body">
              <b>22% of your members are engineering firms</b> — 282 businesses.
              None attended training this year. Your 2024 ISO 9001 course
              sold out in 4 days. <mark>Estimated revenue: $34,200</mark> if
              you run it again this quarter.
            </p>
            <div className="mx-ai-actions">
              <button className="mx-btn mx-btn-ink mx-btn-sm">Draft course outline</button>
              <button className="mx-btn mx-btn-ghost mx-btn-sm">Show segments</button>
            </div>
          </div>
        </main>
      </div>
    </div>
  );
}

function Stat({ label, value, delta, spark, tone }) {
  const toneClass = tone === "pink" ? "is-pink" : tone === "amber" ? "is-amber" : "";
  return (
    <div className="mx-mini-stat">
      <div className="mx-mini-stat-label">{label}</div>
      <div className="mx-mini-stat-value">{value}</div>
      <div className="mx-mini-stat-delta">▲ {delta}</div>
      {spark && <Sparkline values={spark} className={`mx-mini-stat-spark ${toneClass}`} />}
    </div>
  );
}

function Sparkline({ values, className }) {
  const max = Math.max(...values);
  const min = Math.min(...values);
  const range = Math.max(1, max - min);
  const w = 100, h = 22;
  const pts = values.map((v, i) => {
    const x = (i / (values.length - 1)) * w;
    const y = h - ((v - min) / range) * (h - 3) - 2;
    return [x, y];
  });
  let d = `M ${pts[0][0]} ${pts[0][1]}`;
  for (let i = 1; i < pts.length; i++) {
    const [x0,y0] = pts[i-1], [x1,y1] = pts[i];
    const cx = (x0 + x1) / 2;
    d += ` Q ${cx} ${y0} ${x1} ${y1}`;
  }
  const area = `${d} L ${w} ${h} L 0 ${h} Z`;
  return (
    <svg className={className} viewBox={`0 0 ${w} ${h}`} preserveAspectRatio="none" aria-hidden="true">
      <path d={area} fill="currentColor" opacity="0.14"></path>
      <path d={d} fill="none" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round"></path>
      <circle cx={pts[pts.length-1][0]} cy={pts[pts.length-1][1]} r="1.8" fill="currentColor"></circle>
    </svg>
  );
}

function SectorStrip() {
  const segs = [
    { pct: 22, color: "var(--primary)",     name: "Engineering" },
    { pct: 18, color: "var(--pink)",        name: "Manufacturing" },
    { pct: 16, color: "var(--amber)",       name: "Prof svcs" },
    { pct: 12, color: "var(--success)",     name: "Tech" },
    { pct: 32, color: "var(--border-bold)", name: "Other" },
  ];
  return (
    <div className="mx-mini-sectors">
      <div className="mx-mini-sectors-label">Sector mix</div>
      <div className="mx-mini-sectors-bar">
        {segs.map((s,i) => <span key={i} style={{width: s.pct+"%", background: s.color}}></span>)}
      </div>
      <div className="mx-mini-sectors-legend">
        {segs.slice(0,3).map((s,i) => (
          <span key={i}><i style={{background: s.color}}></i>{s.pct}%</span>
        ))}
      </div>
    </div>
  );
}

window.Hero = Hero;
