// Journey timeline — horizontal scroll w/ year anchors

function Journey(){
  const ref = React.useRef(null);
  const trackRef = React.useRef(null);
  const [active, setActive] = React.useState(0);
  React.useEffect(()=>{ window.registerReveal && window.registerReveal(ref.current); },[]);

  React.useEffect(()=>{
    const t = trackRef.current;
    if (!t) return;
    const onScroll = () => {
      const cards = t.querySelectorAll('.jn-card');
      const left = t.scrollLeft + t.clientWidth/2;
      let best = 0, bestDist = Infinity;
      cards.forEach((c,i) => {
        const cx = c.offsetLeft + c.offsetWidth/2;
        const d = Math.abs(cx - left);
        if (d < bestDist) { bestDist = d; best = i; }
      });
      setActive(best);
    };
    t.addEventListener('scroll', onScroll, { passive: true });
    return () => t.removeEventListener('scroll', onScroll);
  }, []);

  const jumpTo = (i) => {
    const card = trackRef.current.querySelectorAll('.jn-card')[i];
    if (card) {
      trackRef.current.scrollTo({
        left: card.offsetLeft - (trackRef.current.clientWidth - card.offsetWidth)/2,
        behavior: 'smooth'
      });
    }
  };

  return (
    <section id="journey" ref={ref} className="reveal" data-screen-label="07 Journey">
      <style>{`
        .jn-head{display:grid;grid-template-columns:180px 1fr;gap:48px;margin-bottom:40px}
        @media (max-width:820px){.jn-head{grid-template-columns:1fr;gap:16px}}
        .jn-title{font-size:clamp(36px,5vw,60px);font-weight:700;letter-spacing:-.03em;line-height:1.05}
        .jn-anchors{display:flex;gap:0;margin-bottom:24px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);position:relative}
        .jn-anchor{flex:1;padding:18px 12px;font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-align:left;color:var(--fg-mute);border-right:1px solid var(--line);transition:all .2s;position:relative}
        .jn-anchor:last-child{border-right:0}
        .jn-anchor:hover{color:var(--fg)}
        .jn-anchor[data-on="1"]{color:var(--accent)}
        .jn-anchor[data-on="1"]::before{content:"";position:absolute;top:-1px;left:0;right:0;height:2px;background:var(--accent)}
        .jn-anchor .yr{font-size:22px;display:block;color:inherit;font-weight:500}
        .jn-anchor .mt{font-size:10px;opacity:.7;margin-top:4px;display:block}

        .jn-track{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;padding:10px 4px 30px;scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
        .jn-track::-webkit-scrollbar{height:6px}
        .jn-track::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:3px}
        .jn-card{min-width:min(440px,80vw);flex:0 0 auto;scroll-snap-align:center;border:1px solid var(--line);border-radius:8px;padding:32px;background:var(--bg-1);display:flex;flex-direction:column;gap:16px;transition:border-color .25s,background .25s;position:relative}
        .jn-card.active{border-color:var(--accent);background:rgba(217,119,6,.04)}
        .jn-card .hh{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:11px;color:var(--fg-mute);letter-spacing:.08em}
        .jn-card .yr{font-family:var(--font-mono);font-size:56px;font-weight:300;letter-spacing:-.04em;line-height:1;color:var(--fg);margin:8px 0}
        .jn-card.active .yr{color:var(--accent)}
        .jn-card .tt{font-size:20px;font-weight:600;letter-spacing:-.01em}
        .jn-card .bd{color:var(--fg-dim);line-height:1.55;font-size:14px}

        .jn-nav{display:flex;gap:8px;justify-content:flex-end;margin-top:-18px}
        .jn-arrow{width:36px;height:36px;border:1px solid var(--line);border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--fg-dim);transition:all .2s}
        .jn-arrow:hover{border-color:var(--accent);color:var(--accent)}
      `}</style>
      <div className="wrap">
        <div className="jn-head">
          <div className="eyebrow">/ 06 · Journey</div>
          <div>
            <h2 className="jn-title">From curiosity<br/>to compounding.</h2>
          </div>
        </div>

        <div className="jn-anchors">
          {TIMELINE.map((t,i) => (
            <button key={t.year} className="jn-anchor" data-on={active===i?"1":"0"} onClick={()=>jumpTo(i)}>
              <span className="yr">{t.year}</span>
              <span className="mt">{t.title.toUpperCase()}</span>
            </button>
          ))}
        </div>

        <div className="jn-track" ref={trackRef}>
          {TIMELINE.map((t,i) => (
            <article key={t.year} className={"jn-card " + (active===i?"active":"")}>
              <div className="hh"><span>STAGE · 0{i+1}</span><span>{t.title.toUpperCase()}</span></div>
              <div className="yr">{t.year}</div>
              <div className="tt">{t.title}</div>
              <div className="bd">{t.body}</div>
            </article>
          ))}
        </div>

        <div className="jn-nav">
          <button className="jn-arrow" onClick={()=>jumpTo(Math.max(0,active-1))} aria-label="Previous">
            <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M9 1L3 7l6 6" stroke="currentColor" strokeWidth="1.5"/></svg>
          </button>
          <button className="jn-arrow" onClick={()=>jumpTo(Math.min(TIMELINE.length-1,active+1))} aria-label="Next">
            <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M5 1l6 6-6 6" stroke="currentColor" strokeWidth="1.5"/></svg>
          </button>
        </div>
      </div>
    </section>
  );
}

Object.assign(window, { Journey });
