/* lead2play — Draft 2 (fresh). Self-contained, bilingual. */
const { useState, useEffect, useRef } = React;

const ICONS = {
  search: <><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.7-3.7"/></>,
  arrow: <path d="M5 12h14M13 6l6 6-6 6"/>,
  brain: <path d="M9 4a3 3 0 0 0-3 3 3 3 0 0 0-1 5 3 3 0 0 0 2 5 3 3 0 0 0 3 1V4zM15 4a3 3 0 0 1 3 3 3 3 0 0 1 1 5 3 3 0 0 1-2 5 3 3 0 0 1-3 1V4z"/>,
  chat: <path d="M5 5h14a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H9l-4 4V6a1 1 0 0 1 1-1z"/>
};
function Icon({ name }) {
  return (
    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8"
      strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">{ICONS[name]}</svg>
  );
}

function Logo() {
  return (
    <a className="brand" href="#top" aria-label="lead2play">
      <img src="assets/logo-black.png" alt="" />
      <span className="wm">lead<span className="two">2</span>play</span>
    </a>
  );
}

/* ── Header ──────────────────────────────────────────────── */
function Header({ t, lang, onToggleLang }) {
  return (
    <header className="hdr" id="top">
      <div className="row">
        <Logo />
        <nav className="nav">
          <a href="#how">{t["nav.how"]}</a>
          <a href="#report">{t["nav.report"]}</a>
          <a href="#science">{t["nav.science"]}</a>
          <a href="#games">{t["nav.games"]}</a>
          <a href="#faq">{t["nav.faq"]}</a>
        </nav>
        <div className="hdr-cta">
          <button className="lang" onClick={onToggleLang} aria-label="Switch language">{lang === "en" ? "DE" : "EN"}</button>
          <button className="btn btn-primary">{t["cta.get"]}</button>
        </div>
      </div>
    </header>
  );
}

/* ── Search ──────────────────────────────────────────────── */
function Search({ t, games, onPick }) {
  const [q, setQ] = useState("");
  const [open, setOpen] = useState(false);
  const [on, setOn] = useState(0);
  const ref = useRef(null);
  const matches = q.trim()
    ? games.filter(g => g.name.toLowerCase().includes(q.trim().toLowerCase())).slice(0, 5)
    : games.slice(0, 5);
  useEffect(() => {
    const fn = e => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
    document.addEventListener("mousedown", fn);
    return () => document.removeEventListener("mousedown", fn);
  }, []);
  const pick = g => { setQ(g.name); setOpen(false); onPick(g); };
  const key = e => {
    if (!open) return;
    if (e.key === "ArrowDown") { e.preventDefault(); setOn(a => Math.min(a + 1, matches.length - 1)); }
    else if (e.key === "ArrowUp") { e.preventDefault(); setOn(a => Math.max(a - 1, 0)); }
    else if (e.key === "Enter") { e.preventDefault(); if (matches[on]) pick(matches[on]); }
    else if (e.key === "Escape") setOpen(false);
  };
  return (
    <div className={"search" + (open && matches.length ? " open" : "")} ref={ref}>
      <div className="search-field">
        <Icon name="search" />
        <input value={q} placeholder={t["search.ph"]}
          onChange={e => { setQ(e.target.value); setOpen(true); setOn(0); }}
          onFocus={() => setOpen(true)} onKeyDown={key} aria-label={t["search.ph"]} />
        <button className="btn btn-primary btn-lg" onClick={() => { if (matches[on]) pick(matches[on]); }}>{t["search.btn"]}</button>
      </div>
      {open && matches.length > 0 && (
        <div className="suggest">
          {matches.map((g, i) => (
            <div key={g.id} className={"r" + (i === on ? " on" : "")}
              onMouseEnter={() => setOn(i)} onClick={() => pick(g)}>
              <span className="em">{g.emoji}</span><span className="nm">{g.name}</span><span className="gn">{g.genre}</span>
            </div>
          ))}
        </div>
      )}
      <div className="chips">
        <span className="lbl">{t["search.popular"]}</span>
        {games.slice(0, 5).map(g => <span className="chip" key={g.id} onClick={() => pick(g)}>{g.emoji} {g.name}</span>)}
      </div>
    </div>
  );
}

/* ── Hero ─────────────────────────────────────────────────── */
function Hero({ t, games, onPick }) {
  return (
    <section className="hero" data-screen-label="Hero">
      <div className="hero-in">
        <span className="eyebrow">{t["hero.eyebrow"]}</span>
        <h1>{t["hero.pre"]}<em>{t["hero.em"]}</em>{t["hero.post"]}</h1>
        <p className="lead">{t["hero.sub"]}</p>
        <Search t={t} games={games} onPick={onPick} />
        <div className="trust">
          <span><b>200+</b> {t["trust.a"]}</span><span className="d" />
          <span>{t["trust.b"]}</span><span className="d" />
          <span>{t["trust.c"]}</span>
        </div>
      </div>
    </section>
  );
}

/* ── How it works ────────────────────────────────────────── */
function How({ t }) {
  const ics = ["search", "brain", "chat"];
  return (
    <section className="section" id="how" data-screen-label="How it works">
      <div className="wrap">
        <div className="shead reveal">
          <span className="eyebrow">{t["how.eyebrow"]}</span>
          <h2 className="h2">{t["how.title"]}</h2>
        </div>
        <div className="steps">
          {t["steps"].map((s, i) => (
            <div className="step reveal" key={i}>
              <div className="ic"><Icon name={ics[i]} /></div>
              <span className="num">{"0" + (i + 1)}</span>
              <h3>{s.t}</h3>
              <p>{s.d}</p>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ── Report ──────────────────────────────────────────────── */
function Report({ t, game }) {
  if (!game) return null;
  return (
    <section className="section" id="report" data-screen-label="Report" style={{ background: "var(--surface-2)" }}>
      <div className="wrap">
        <div className="shead reveal">
          <span className="eyebrow">{t["report.eyebrow"]}</span>
          <h2 className="h2">{t["report.title"]}</h2>
        </div>
        <div className="report reveal">
          <div className="top">
            <div className="cover">{game.emoji}</div>
            <div>
              <h3>{game.name}</h3>
              <div className="meta">{game.genre} · {game.platform}</div>
            </div>
            <span className="age">{t["report.age"]} {game.age}</span>
          </div>
          <div className="body">
            <div className="main">
              <p className="lede">{game.lede}</p>
              <p className="blabel">{t["report.skills"]}</p>
              {game.skills.map((s, i) => (
                <div className="skill" key={s.name}>
                  <div className="t"><b>{s.name}</b><span>{s.level}%</span></div>
                  <div className="bar"><div className="fill" style={{ width: s.level + "%", animationDelay: (i * 0.07) + "s" }} /></div>
                </div>
              ))}
            </div>
            <div className="side">
              <div className="sci">
                <span className="ic"><Icon name="brain" /></span>
                <div><p>{game.science}</p><cite>{game.source}</cite></div>
              </div>
              <div className="tip">
                <p className="l">{t["report.tip"]}</p>
                <p>{game.tip}</p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

/* ── Science band ────────────────────────────────────────── */
function Science({ t, science }) {
  return (
    <section className="section band" id="science" data-screen-label="Science">
      <div className="wrap">
        <div className="shead reveal">
          <span className="eyebrow">{t["science.eyebrow"]}</span>
          <h2 className="h2">{t["science.title"]}</h2>
          <p className="lead">{t["science.sub"]}</p>
        </div>
        <div className="stats reveal">
          {t["stats"].map((s, i) => <div className="stat" key={i}><div className="n">{s.n}</div><div className="c">{s.c}</div></div>)}
        </div>
        <div className="findings reveal">
          {science.map((s, i) => (
            <div className="finding" key={i}>
              <div><h4>{s.title}</h4><p>{s.body}</p></div>
              <div className="src">{s.source}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ── Library ─────────────────────────────────────────────── */
function Library({ t, games, onPick }) {
  return (
    <section className="section" id="games" data-screen-label="Games">
      <div className="wrap">
        <div className="shead reveal">
          <span className="eyebrow">{t["library.eyebrow"]}</span>
          <h2 className="h2">{t["library.title"]}</h2>
        </div>
        <div className="lib">
          {games.map(g => (
            <article className="libcard reveal" key={g.id} onClick={() => onPick(g)}>
              <div className="h"><div className="cv">{g.emoji}</div><span className="age">{g.age}</span></div>
              <div className="nm">{g.name}</div>
              <div className="gn">{g.genre}</div>
              <div className="tags">{g.skills.slice(0, 2).map(s => <span className="tg" key={s.name}>{s.name}</span>)}</div>
            </article>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ── Quotes ──────────────────────────────────────────────── */
function Quotes({ t, stories }) {
  return (
    <section className="section" data-screen-label="Parents" style={{ background: "var(--surface-2)" }}>
      <div className="wrap">
        <div className="shead reveal">
          <span className="eyebrow">{t["parents.eyebrow"]}</span>
          <h2 className="h2">{t["parents.title"]}</h2>
        </div>
        <div className="quotes">
          {stories.map((s, i) => (
            <figure className="quote reveal" key={i} style={{ margin: 0 }}>
              <blockquote>“{s.quote}”</blockquote>
              <figcaption className="who">
                <span className="av" style={{ background: `oklch(0.6 0.16 ${s.hue})` }}>{s.name.charAt(0)}</span>
                <span><b>{s.name}</b><span>{s.role}</span></span>
              </figcaption>
            </figure>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ── FAQ ─────────────────────────────────────────────────── */
function FAQ({ t, faq }) {
  const [open, setOpen] = useState(0);
  return (
    <section className="section" id="faq" data-screen-label="FAQ">
      <div className="wrap-sm">
        <div className="shead reveal">
          <span className="eyebrow">{t["faq.eyebrow"]}</span>
          <h2 className="h2">{t["faq.title"]}</h2>
        </div>
        <div className="faq reveal">
          {faq.map((f, i) => (
            <div className={"item" + (open === i ? " open" : "")} key={i}>
              <button className="q" onClick={() => setOpen(open === i ? -1 : i)}><span>{f.q}</span><span className="pm" /></button>
              <div className="a" style={{ maxHeight: open === i ? 320 : 0 }}><div className="a-in">{f.a}</div></div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ── CTA + footer ────────────────────────────────────────── */
function CTAFooter({ t }) {
  return (
    <React.Fragment>
      <section className="cta" data-screen-label="CTA">
        <div className="wrap-sm">
          <span className="eyebrow">{t["cta.eyebrow"]}</span>
          <h2 style={{ marginTop: 18 }}>{t["cta.title1"]}<br />{t["cta.title2"]}</h2>
          <p>{t["cta.sub"]}</p>
          <button className="btn btn-primary btn-lg">{t["cta.btn"]}</button>
        </div>
      </section>
      <footer className="footer" data-screen-label="Footer">
        <div className="row">
          <Logo />
          <span>{t["footer.tag"]}</span>
          <span>© 2026 lead2play</span>
        </div>
      </footer>
    </React.Fragment>
  );
}

Object.assign(window, { Icon, Logo, Header, Search, Hero, How, Report, Science, Library, Quotes, FAQ, CTAFooter });
