// Hero section — terminal-style readout with typed roles

const HERO_ROLES = [
  "Investment Management Student",
  "Finance & Markets Researcher",
  "Quantitative Strategy Builder",
  "Software Engineer (by necessity)",
];

function useTyped(words, { typeMs = 60, eraseMs = 30, holdMs = 1400 } = {}) {
  const [idx, setIdx] = React.useState(0);
  const [text, setText] = React.useState("");
  const [phase, setPhase] = React.useState("type"); // type | hold | erase

  React.useEffect(() => {
    const word = words[idx % words.length];
    let t;
    if (phase === "type") {
      if (text.length < word.length) {
        t = setTimeout(() => setText(word.slice(0, text.length + 1)), typeMs);
      } else {
        t = setTimeout(() => setPhase("erase"), holdMs);
      }
    } else if (phase === "erase") {
      if (text.length > 0) {
        t = setTimeout(() => setText(word.slice(0, text.length - 1)), eraseMs);
      } else {
        setIdx(i => (i + 1) % words.length);
        setPhase("type");
      }
    }
    return () => clearTimeout(t);
  }, [text, phase, idx, words, typeMs, eraseMs, holdMs]);

  return text;
}

function Hero({ variant = "terminal" }) {
  const typed = useTyped(HERO_ROLES);
  const [clock, setClock] = React.useState(() => new Date());
  React.useEffect(() => {
    const id = setInterval(() => setClock(new Date()), 1000);
    return () => clearInterval(id);
  }, []);
  const pad = n => String(n).padStart(2,"0");
  const ts = `${pad(clock.getUTCHours())}:${pad(clock.getUTCMinutes())}:${pad(clock.getUTCSeconds())} UTC`;

  return (
    <section className="hero" data-screen-label="01 Hero">
      <style>{`
        .hero{min-height:100vh;display:flex;align-items:center;padding-top:120px;padding-bottom:80px;position:relative}
        .hero-grid{display:grid;grid-template-columns:1.25fr .9fr;gap:64px;align-items:center;width:100%}
        @media (max-width:980px){.hero-grid{grid-template-columns:1fr;gap:48px}}
        .hero-meta{display:flex;align-items:center;gap:16px;margin-bottom:36px;flex-wrap:wrap}
        .hero-loc{font-family:var(--font-mono);font-size:11px;color:var(--fg-mute);letter-spacing:.1em;text-transform:uppercase;display:flex;align-items:center;gap:8px}
        .hero-loc .bullet{width:4px;height:4px;background:var(--fg-ghost);border-radius:50%}
        .hero-name{
          font-size:clamp(56px, 11vw, 168px);
          font-weight:800;letter-spacing:-.04em;line-height:.92;
          margin:0 0 24px;
          font-feature-settings:"ss01";
        }
        .hero-name .amp{color:var(--accent);font-weight:300;font-style:italic;padding:0 .02em}
        .hero-role-wrap{
          font-family:var(--font-mono);
          font-size:clamp(14px,1.6vw,18px);
          color:var(--fg-dim);display:flex;align-items:center;gap:14px;
          margin-bottom:28px;min-height:28px;
        }
        .hero-role-wrap .bracket{color:var(--accent);opacity:.7}
        .hero-role{color:var(--fg)}
        .caret{display:inline-block;width:9px;height:18px;background:var(--accent);margin-left:4px;vertical-align:middle;animation:blink 1s step-end infinite}
        @keyframes blink{50%{opacity:0}}
        .hero-tag{
          font-size:clamp(18px,2.2vw,26px);max-width:640px;
          color:var(--fg-dim);line-height:1.45;margin-bottom:48px;
          text-wrap:balance;
        }
        .hero-tag em{color:var(--fg);font-style:normal}
        .hero-cta-row{display:flex;gap:12px;flex-wrap:wrap}
        .hero-cta{
          display:inline-flex;align-items:center;gap:10px;padding:14px 22px;
          border:1px solid var(--line-2);border-radius:999px;font-family:var(--font-mono);
          font-size:12px;letter-spacing:.1em;text-transform:uppercase;transition:all .2s;
        }
        .hero-cta.primary{background:var(--accent);border-color:var(--accent);color:#0a0a0a;font-weight:600}
        .hero-cta.primary:hover{background:#f18a17;transform:translateY(-1px)}
        .hero-cta:hover{border-color:var(--fg);color:var(--fg)}
        .hero-cta svg{width:12px;height:12px}

        /* Terminal panel */
        .term{
          border:1px solid var(--line);background:rgba(14,14,14,.72);
          backdrop-filter:blur(4px);border-radius:10px;overflow:hidden;
          font-family:var(--font-mono);font-size:12px;
          box-shadow:0 30px 80px -30px rgba(0,0,0,.6), 0 1px 0 rgba(255,255,255,.03) inset;
        }
        .term-bar{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.02)}
        .term-dots{display:flex;gap:6px}
        .term-dot{width:10px;height:10px;border-radius:50%;background:rgba(255,255,255,.14)}
        .term-title{color:var(--fg-mute);font-size:11px;letter-spacing:.08em}
        .term-title b{color:var(--fg-dim);font-weight:500}
        .term-live{margin-left:auto;color:var(--ok);font-size:10px;letter-spacing:.1em;display:flex;align-items:center;gap:6px}
        .term-live i{width:6px;height:6px;background:var(--ok);border-radius:50%;box-shadow:0 0 8px rgba(74,222,128,.7);animation:pulse 1.6s ease-in-out infinite}
        .term-body{padding:18px 18px 22px;line-height:1.75}
        .term-line{display:flex;gap:8px}
        .term-line .p{color:var(--accent)}
        .term-line .c{color:var(--fg)}
        .term-kv{color:var(--fg-dim)}
        .term-kv .k{color:var(--fg-mute)}
        .term-kv .v{color:var(--fg);font-weight:500}
        .term-kv .v.up{color:var(--ok)}
        .term-kv .v.down{color:var(--bad)}
        .term-sep{height:1px;background:var(--line);margin:10px 0}
        .term-row{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;padding:4px 0}
        .term-row .sym{color:var(--fg)}
        .term-row .desc{color:var(--fg-mute);font-size:11px}
        .term-row .val{font-variant-numeric:tabular-nums;color:var(--fg);display:flex;gap:6px;align-items:center}
        .term-row .chg{font-size:11px}
        .term-row .chg.up{color:var(--ok)}
        .term-row .chg.down{color:var(--bad)}
        .spark{height:14px;width:60px;display:inline-block}

        /* scroll cue */
        .scroll-cue{
          position:absolute;left:50%;bottom:28px;transform:translateX(-50%);
          display:flex;flex-direction:column;align-items:center;gap:8px;
          font-family:var(--font-mono);font-size:10px;letter-spacing:.16em;color:var(--fg-mute);
        }
        .scroll-cue .bar{width:1px;height:32px;background:linear-gradient(to bottom,var(--fg-ghost),transparent);animation:drop 2.4s ease-in-out infinite}
        @keyframes drop{0%{transform:translateY(-8px);opacity:0}30%{opacity:1}100%{transform:translateY(8px);opacity:0}}
      `}</style>

      <div className="wrap">
        <div className="hero-grid">
          {/* LEFT */}
          <div>
            <div className="hero-meta">
              <span className="hero-loc"><span className="bullet"></span>Dubai · Ahmedabad · Remote</span>
              <span className="hero-loc mono">{ts}</span>
            </div>

            <h1 className="hero-name">YASH<br/>AHIRE<span className="amp">.</span></h1>

            <div className="hero-role-wrap">
              <span className="bracket">[</span>
              <span className="hero-role">{typed}<span className="caret"></span></span>
              <span className="bracket" style={{marginLeft:'auto'}}>]</span>
            </div>

            <p className="hero-tag">I study <em>markets</em>, model <em>risk</em>, and build the <em>tools</em> my research demands. Master's in Investment Management at Middlesex, Dubai. Software came second — because the spreadsheets kept running out first.</p>

            <div className="hero-cta-row">
              <a className="hero-cta primary" href="#work">
                See the work
                <svg viewBox="0 0 16 16" fill="none"><path d="M1 8h14M9 2l6 6-6 6" stroke="currentColor" strokeWidth="1.5"/></svg>
              </a>
              <a className="hero-cta" href="#contact">Get in touch</a>
            </div>
          </div>

          {/* RIGHT: terminal */}
          {variant !== "minimal" && <TerminalPanel />}
        </div>
      </div>

      <div className="scroll-cue">
        <span>SCROLL</span>
        <span className="bar"></span>
      </div>
    </section>
  );
}

function TerminalPanel(){
  const shipped = (window.PROJECTS || []).length;
  const live    = (window.PROJECTS || []).filter(p => p.status === "LIVE").length;

  return (
    <div className="term" role="complementary" aria-label="Live readout">
      <div className="term-bar">
        <div className="term-dots"><i className="term-dot"/><i className="term-dot"/><i className="term-dot"/></div>
        <span className="term-title">~ /<b>yash</b>/portfolio — <b>readout.sh</b></span>
        <span className="term-live"><i/>LIVE</span>
      </div>
      <div className="term-body">
        <div className="term-line"><span className="p">$</span><span className="c">whoami</span></div>
        <div className="term-kv"><span className="k">→ </span><span className="v">yash.ahire</span> <span className="k">· self-taught · shipping since '22</span></div>
        <div className="term-line" style={{marginTop:10}}><span className="p">$</span><span className="c">cat status.json</span></div>
        <div className="term-kv"><span className="k">location         </span> <span className="v">Dubai · Ahmedabad</span></div>
        <div className="term-kv"><span className="k">focus            </span> <span className="v">markets · risk · tools</span></div>
        <div className="term-kv"><span className="k">projects_shipped </span> <span className="v">{shipped > 0 ? shipped : "queued"}</span></div>
        <div className="term-kv"><span className="k">strategies_live  </span> <span className={"v " + (live > 0 ? "up" : "")}>{live > 0 ? live : "—"}</span></div>
        <div className="term-kv"><span className="k">cs_degrees       </span> <span className="v down">0</span></div>
        <div className="term-sep"/>
        <div className="term-line"><span className="p">$</span><span className="c">./tape --top 4</span></div>
        <div className="term-kv"><span className="k">// awaiting first listing — run `git pull` </span></div>
      </div>
    </div>
  );
}

Object.assign(window, { Hero });
