// ─── Polished variant: top-level shell + GSAP wiring ───────────────────

function PolishedNav() {
  const ref = React.useRef(null);
  React.useEffect(() => {
    const onScroll = () => {
      if (!ref.current) return;
      ref.current.classList.toggle('scrolled', window.scrollY > 40);
    };
    window.addEventListener('scroll', onScroll, { passive: true });
    onScroll();
    return () => window.removeEventListener('scroll', onScroll);
  }, []);

  return (
    <nav className="p-nav" ref={ref}>
      <div className="wordmark">Arcline*</div>
      <ul>
        <li><a href="#work">Work</a></li>
        <li><a href="#services">Services</a></li>
        <li><a href="#process">Process</a></li>
        <li><a href="#about">Studio</a></li>
        <li><a href="#contact">Contact</a></li>
      </ul>
      <a href="#contact" className="nav-cta">Start a project →</a>
    </nav>
  );
}

function splitToWords(text) {
  return text.split(' ').map((w, i) => (
    <span className="word" key={i}>
      <span data-reveal>{w}</span>
      {i < text.split(' ').length - 1 ? ' ' : ''}
    </span>
  ));
}

function PolishedHero({ variant }) {
  const D = window.ARCLINE_DATA.hero;
  const heroRef = React.useRef(null);

  React.useEffect(() => {
    if (!window.gsap || !heroRef.current) return;
    const ctx = gsap.context(() => {
      const words = heroRef.current.querySelectorAll('h1 [data-reveal]');
      gsap.set(words, { yPercent: 110 });
      gsap.to(words, {
        yPercent: 0,
        duration: 1.1,
        ease: 'expo.out',
        stagger: 0.08,
        delay: 0.15,
      });
      gsap.from(heroRef.current.querySelectorAll('[data-fade]'), {
        opacity: 0,
        y: 24,
        duration: 0.9,
        ease: 'power3.out',
        stagger: 0.08,
        delay: 0.5,
      });
      // orbit parallax on scroll
      gsap.to(heroRef.current.querySelector('.hero-bg'), {
        yPercent: 25,
        scrollTrigger: {
          trigger: heroRef.current,
          start: 'top top',
          end: 'bottom top',
          scrub: true,
        },
      });
    }, heroRef);
    return () => ctx.revert();
  }, [variant]);

  return (
    <section className="p-hero" data-h={variant} ref={heroRef}>
      <div className="hero-bg">
        <div className="hero-blob" />
        <div className="hero-blob b2" />
      </div>
      <div className="container">
        {variant === 'split' ? (
          <div className="hero-grid">
            <div>
              <div className="tag" data-fade>
                <span className="tag-pill">{D.eyebrow}</span>
              </div>
              <h1>
                {D.headline.map((w, i) => (
                  <span className="word" key={i}>
                    <span data-reveal className={i === D.accent ? 'accent' : ''}>{w}</span>
                    {i < D.headline.length - 1 ? ' ' : ''}
                  </span>
                ))}
              </h1>
              <p className="sub" data-fade>{D.sub}</p>
              <div className="cta-row" data-fade>
                <a href="#contact" className="btn btn-primary">{D.primaryCta} <span className="arr">→</span></a>
                <a href="#work" className="btn btn-ghost">{D.secondaryCta}</a>
              </div>
            </div>
            <div className="visual" data-fade>
              <PolishedHeroSplitVisual />
            </div>
          </div>
        ) : variant === 'ticker' ? (
          <>
            <div className="tag" data-fade>
              <span className="tag-pill">{D.eyebrow}</span>
            </div>
            <h1>
              {D.headline.map((w, i) => (
                <span className="word" key={i}>
                  <span data-reveal className={i === D.accent ? 'accent' : ''}>{w}</span>
                  {i < D.headline.length - 1 ? ' ' : ''}
                </span>
              ))}
            </h1>
            <p className="sub" data-fade>{D.sub}</p>
            <div className="cta-row" data-fade>
              <a href="#contact" className="btn btn-primary">{D.primaryCta} <span className="arr">→</span></a>
              <a href="#work" className="btn btn-ghost">{D.secondaryCta}</a>
            </div>
            <div className="ticker" data-fade>
              <div className="ticker-track">
                {[...D.ticker, ...D.ticker].map((t, i) => <span key={i}>{t}</span>)}
              </div>
            </div>
          </>
        ) : (
          <>
            <div className="tag" data-fade>
              <span className="tag-pill">{D.eyebrow}</span>
            </div>
            <h1>
              {D.headline.map((w, i) => (
                <span className="word" key={i}>
                  <span data-reveal className={i === D.accent ? 'accent' : ''}>{w}</span>
                  {i < D.headline.length - 1 ? ' ' : ''}
                </span>
              ))}
            </h1>
            <p className="sub" data-fade>{D.sub}</p>
            <div className="cta-row" data-fade>
              <a href="#contact" className="btn btn-primary">{D.primaryCta} <span className="arr">→</span></a>
              <a href="#work" className="btn btn-ghost">{D.secondaryCta}</a>
            </div>
            <div className="meta-row" data-fade>
              {D.meta.map((m, i) => (
                <div className="col" key={i}>
                  {m.lbl}<span>{m.v}</span>
                </div>
              ))}
            </div>
          </>
        )}
      </div>
    </section>
  );
}

function PolishedHeroSplitVisual() {
  return (
    <div style={{ position: 'absolute', inset: 0, padding: 32 }}>
      <svg viewBox="0 0 400 500" style={{ width: '100%', height: '100%' }} fill="none" stroke="currentColor" strokeWidth="0.6">
        {[40, 80, 130, 190, 260].map((r, i) => (
          <circle key={i} cx="200" cy="250" r={r} opacity={0.5 - i * 0.07} stroke="var(--ink-dim)" />
        ))}
        <circle cx="200" cy="250" r="8" fill="var(--accent)" stroke="none" />
        <circle cx="280" cy="190" r="4" fill="var(--accent)" stroke="none" />
        <circle cx="120" cy="310" r="3" fill="var(--ink)" stroke="none" />
        <circle cx="320" cy="320" r="5" fill="var(--ink)" stroke="none" />
        <line x1="200" y1="250" x2="280" y2="190" stroke="var(--accent)" strokeWidth="0.8" />
        <text x="285" y="186" fill="var(--ink-dim)" fontSize="9" fontFamily="JetBrains Mono">claude-3.5</text>
        <text x="125" y="324" fill="var(--ink-dim)" fontSize="9" fontFamily="JetBrains Mono">gpt-4o</text>
        <text x="324" y="328" fill="var(--ink-dim)" fontSize="9" fontFamily="JetBrains Mono">llama-3.1</text>
        <text x="205" y="254" fill="var(--ink)" fontSize="10" fontFamily="Fraunces" fontStyle="italic">arcline</text>
      </svg>
    </div>
  );
}

window.PolishedNav = PolishedNav;
window.PolishedHero = PolishedHero;
