// FINAL VARIANT — Dynamic Grid body + Minimal-style hero & lettering
const { useState: useStateF, useMemo: useMemoF, useRef: useRefF } = React;

function GlyphF({ category, size = 56 }) {
  if (category === "sicurezza") {
    return (
      <svg width={size} height={size} viewBox="0 0 64 64" fill="none">
        <path d="M32 6L54 14V32C54 44 44 54 32 58C20 54 10 44 10 32V14L32 6Z" fill="currentColor" opacity="0.15"/>
        <path d="M32 6L54 14V32C54 44 44 54 32 58C20 54 10 44 10 32V14L32 6Z" stroke="currentColor" strokeWidth="2"/>
        <path d="M22 32L29 39L42 26" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"/>
      </svg>
    );
  }
  if (category === "compliance") {
    return (
      <svg width={size} height={size} viewBox="0 0 64 64" fill="none">
        <rect x="14" y="10" width="32" height="44" rx="2" fill="currentColor" opacity="0.15"/>
        <rect x="14" y="10" width="32" height="44" rx="2" stroke="currentColor" strokeWidth="2"/>
        <path d="M22 22H38M22 30H38M22 38H32" stroke="currentColor" strokeWidth="2" strokeLinecap="round"/>
        <circle cx="46" cy="46" r="10" fill="currentColor"/>
        <path d="M42 46L45 49L51 43" stroke="white" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"/>
      </svg>
    );
  }
  if (category === "lom") {
    return (
      <svg width={size} height={size} viewBox="0 0 64 64" fill="none">
        <circle cx="32" cy="34" r="22" fill="currentColor" opacity="0.15"/>
        <circle cx="32" cy="34" r="22" stroke="currentColor" strokeWidth="2"/>
        <path d="M26 10H38M32 10V16" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round"/>
        <path d="M48 18L52 14M52 18L48 14" stroke="currentColor" strokeWidth="2" strokeLinecap="round" opacity="0.5"/>
        <path d="M28 28L40 34L28 40V28Z" fill="currentColor"/>
      </svg>
    );
  }
  return (
    <svg width={size} height={size} viewBox="0 0 64 64" fill="none">
      <circle cx="32" cy="32" r="22" stroke="currentColor" strokeWidth="2" opacity="0.4"/>
      <circle cx="32" cy="32" r="14" stroke="currentColor" strokeWidth="2" opacity="0.7"/>
      <circle cx="32" cy="32" r="6" fill="currentColor"/>
      <path d="M32 4V14M32 50V60M4 32H14M50 32H60" stroke="currentColor" strokeWidth="2" strokeLinecap="round"/>
    </svg>
  );
}

function CardF({ course, isOpen, onToggle }) {
  const cat = window.CATEGORY_META[course.category];
  const ref = useRefF(null);
  const onMove = (e) => {
    if (isOpen || !ref.current) return;
    const r = ref.current.getBoundingClientRect();
    ref.current.style.setProperty("--gx", `${e.clientX - r.left}px`);
    ref.current.style.setProperty("--gy", `${e.clientY - r.top}px`);
  };
  return (
    <article
      ref={ref}
      className={"f-card f-card-" + course.category + (isOpen ? " is-open" : "")}
      onClick={onToggle}
      onMouseMove={onMove}
      style={{ "--cat-color": cat.color }}
    >
      <div className="f-card-glow"></div>
      <div className="f-card-body">
        <div className="f-card-top">
          <div className="f-card-icon"><GlyphF category={course.category} /></div>
          <div className="f-card-num">{course.num}</div>
        </div>
        <span className="f-tag">
          <span className="f-tag-dot"></span>
          {cat.label}
        </span>
        <h3 className="f-title">{course.title}</h3>
        <div className="f-meta-row">
          <span className="f-meta-pill">{course.duration}</span>
          <span className="f-meta-pill f-meta-pill-ghost">
            {course.category === "lom" ? "Microlearning" : "E-learning"}
          </span>
        </div>
        <p className="f-desc">{course.desc}</p>
        <button className="f-btn">
          <span>{isOpen ? "Nascondi indice" : "Vedi indice contenuti"}</span>
          <span className="f-btn-arrow">{isOpen ? "↑" : "↓"}</span>
        </button>
        <div className="f-expand">
          <div className="f-expand-inner">
            <div className="f-detail">
              <div>
                <span className="f-detail-label">Destinatari</span>
                <p>{course.audience}</p>
              </div>
              <div>
                <span className="f-detail-label">Riferimenti</span>
                <p>{course.norm}</p>
              </div>
              <div>
                <span className="f-detail-label">Attestazione</span>
                <p>{course.cert}</p>
              </div>
            </div>
            <div className="f-topics">
              <span className="f-detail-label">Indice dei contenuti ({course.topics.length})</span>
              <ul>
                {course.topics.map((t, i) => (
                  <li key={i}>
                    <span className="f-topic-num">{String(i + 1).padStart(2, "0")}</span>
                    <span>{t}</span>
                  </li>
                ))}
              </ul>
            </div>
          </div>
        </div>
      </div>
    </article>
  );
}

function FinalVariant() {
  const [filter, setFilter] = useStateF("all");
  const [openId, setOpenId] = useStateF(null);
  const [search, setSearch] = useStateF("");

  const filtered = useMemoF(() => {
    return window.COURSES.filter((c) => {
      if (filter !== "all" && c.category !== filter) return false;
      if (search && !(c.title + " " + c.desc + " " + c.topics.join(" "))
        .toLowerCase().includes(search.toLowerCase())) return false;
      return true;
    });
  }, [filter, search]);

  const totalHours = window.COURSES.reduce((s, c) => s + c.hours, 0);

  return (
    <div className="finalv">
      <header className="f-topbar">
        <div className="f-topbar-inner">
          <div className="f-brand"><img src="assets/logo.png" alt="Top Spin Consulting"/></div>
          <nav className="f-nav">
            <a href="#catalogo">Catalogo</a>
            <a href="#ondemand">On-demand</a>
            <a href="#contatti">Contatti</a>
          </nav>
          <a href="#contatti" className="f-cta-mini">
            <span>Prenota demo</span>
            <span className="f-arrow">→</span>
          </a>
        </div>
      </header>

      {/* HERO — stile Minimal Index, due colonne, headline gigante */}
      <section className="f-hero">
        <div className="f-hero-inner">
          <div className="f-hero-left">
            <div className="f-eyebrow">— Catalogo formativo aziendale</div>
            <h1 className="f-h1">
              Formazione,<br/>sicurezza<br/>e cultura<br/>organizzativa.
            </h1>
            <p className="f-lead">
              Indice ragionato dei <strong>{window.COURSES.length} percorsi e-learning</strong> in
              autoapprendimento per aziende e organizzazioni — sicurezza sul lavoro,
              compliance normativa, ESG e cultura.
            </p>
            <div className="f-hero-cta">
              <a href="#catalogo" className="f-cta-primary">
                Vai all'indice
                <span className="f-arrow-circle">↓</span>
              </a>
              <a href="#contatti" className="f-cta-ghost">Prenota demo →</a>
            </div>
          </div>
          <aside className="f-hero-right">
            <div className="f-hero-meta">
              <div className="f-hero-meta-row">
                <span className="f-meta-label">Edizione</span>
                <span>2026</span>
              </div>
              <div className="f-hero-meta-row">
                <span className="f-meta-label">Percorsi</span>
                <span>{window.COURSES.length}</span>
              </div>
              <div className="f-hero-meta-row">
                <span className="f-meta-label">Ore totali</span>
                <span>{totalHours}h</span>
              </div>
              <div className="f-hero-meta-row">
                <span className="f-meta-label">Aree</span>
                <span>3</span>
              </div>
              <div className="f-hero-meta-row">
                <span className="f-meta-label">Modalità</span>
                <span>E-learning</span>
              </div>
              <div className="f-hero-meta-row">
                <span className="f-meta-label">Lingua</span>
                <span>Italiano</span>
              </div>
            </div>
            <div className="f-hero-categories">
              {window.CATEGORIES.filter((c) => c.id !== "all").map((c) => {
                const color = window.CATEGORY_META[c.id].color;
                return (
                  <a
                    key={c.id}
                    href="#catalogo"
                    className="f-hero-cat"
                    style={{ "--cat-color": color }}
                    onClick={() => setFilter(c.id)}
                  >
                    <span className="f-cat-dot"></span>
                    <span className="f-hero-cat-label">{c.label}</span>
                  </a>
                );
              })}
            </div>
          </aside>
        </div>
      </section>

      {/* FASCIA DI TRANSIZIONE — categorie tematiche + LOM trasversale */}
      <section className="f-bridge">
        <div className="f-bridge-inner">
          {window.CATEGORIES.filter((c) => c.id !== "lom").map((c) => {
            const count = c.id === "all"
              ? window.COURSES.length
              : window.COURSES.filter((x) => x.category === c.id).length;
            const color = window.CATEGORY_META[c.id].color;
            return (
              <button
                key={c.id}
                className={"f-bridge-item " + (c.id === "all" ? "f-bridge-item-all " : "") + (filter === c.id ? "is-active" : "")}
                style={{ "--cat-color": color }}
                onClick={() => {
                  setFilter(c.id === "all" ? "all" : (filter === c.id ? "all" : c.id));
                  document.getElementById("catalogo")?.scrollIntoView({ behavior: "smooth", block: "start" });
                }}
              >
                <span className="f-bridge-dot"></span>
                <span className="f-bridge-label">{c.label}</span>
                <span className="f-bridge-stats">
                  <span className="f-bridge-count">{String(count).padStart(2, "0")}</span>
                  <span className="f-bridge-sep">corsi</span>
                </span>
              </button>
            );
          })}
        </div>
        {/* RIGA TRASVERSALE — Learn One Minute attraversa tutte le aree */}
        <button
          className={"f-bridge-lom " + (filter === "lom" ? "is-active" : "")}
          onClick={() => {
            setFilter(filter === "lom" ? "all" : "lom");
            document.getElementById("catalogo")?.scrollIntoView({ behavior: "smooth", block: "start" });
          }}
        >
          <span className="f-bridge-lom-tag">
            <img src="assets/lom-logo.png" alt="Learn One Minute" className="f-bridge-lom-logo"/>
          </span>
          <span className="f-bridge-lom-main">
            <span className="f-bridge-lom-title">
              <span className="f-bridge-lom-tagline">
                <span className="f-bridge-lom-pulse"></span>
                Trasversale
              </span>
              <span className="f-bridge-lom-name">Learn One Minute</span>
              <span className="f-bridge-lom-sub">microlearning per le aziende</span>
            </span>
            <span className="f-bridge-lom-desc">
              Pillole video da 60 secondi che attraversano le aree del catalogo — Excel, comunicazione, AI, cultura digitale. Format coinvolgente, fruibile da mobile, modellato su misura.
            </span>
          </span>
          <span className="f-bridge-lom-arrow">→</span>
        </button>
      </section>

      {/* CATALOGO */}
      <section className="f-catalog" id="catalogo">
        <div className="f-catalog-head">
          <div>
            <span className="f-label">
              {filter === "all"
                ? `Indice — ${window.COURSES.length} corsi`
                : `${filtered.length} di ${window.COURSES.length} corsi`}
            </span>
            <h2 className="f-h2">Esplora<br/>i percorsi.</h2>
            {filter !== "all" ? (
              <p className="f-h2-sub">
                <span className="f-filter-chip" style={{
                  "--cat-color": window.CATEGORY_META[filter]?.color || "#005070"
                }}>
                  <span className="f-filter-chip-dot"></span>
                  Filtrato per: <strong>{window.CATEGORIES.find((c) => c.id === filter)?.label}</strong>
                  <button className="f-filter-chip-clear" onClick={() => setFilter("all")} aria-label="Mostra tutti">×</button>
                </span>
              </p>
            ) : (
              <p className="f-h2-sub">Clicca una card per vedere l'indice completo dei contenuti. Usa la barra di sintesi sopra per filtrare per categoria.</p>
            )}
          </div>
          <div className="f-search">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
              <circle cx="7" cy="7" r="5" stroke="currentColor" strokeWidth="1.5"/>
              <path d="M11 11L14 14" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"/>
            </svg>
            <input
              type="text"
              placeholder="Cerca corso, argomento, normativa..."
              value={search}
              onChange={(e) => setSearch(e.target.value)}
            />
            {search && <button className="f-search-clear" onClick={() => setSearch("")}>×</button>}
          </div>
        </div>

        <div className="f-grid">
          {filtered.length === 0 ? (
            <div className="f-empty">
              <p>Nessun corso trovato.</p>
              <button onClick={() => { setSearch(""); setFilter("all"); }}>Reset filtri</button>
            </div>
          ) : (
            filtered.map((c) => (
              <CardF
                key={c.id}
                course={c}
                isOpen={openId === c.id}
                onToggle={() => setOpenId(openId === c.id ? null : c.id)}
              />
            ))
          )}
        </div>
      </section>

      {/* ON-DEMAND — Progettazione e produzione su misura */}
      <section className="f-ondemand" id="ondemand">
        <div className="f-ondemand-inner">
          <div className="f-ondemand-left">
            <span className="f-label">On-demand</span>
            <h2 className="f-h2">
              Progettazione<br/>e produzione<br/>su misura.
            </h2>
            <p className="f-ondemand-lead">
              Oltre al catalogo, progettiamo e produciamo <strong>qualsiasi percorso
              formativo</strong> a partire dai fabbisogni della tua organizzazione —
              dalla fase di analisi al rilascio degli attestati, con contenuti
              dedicati, brandizzati e tracciabili.
            </p>
            <a href="#contatti" className="f-cta-primary">
              Richiedi un preventivo
              <span className="f-arrow-circle">→</span>
            </a>
          </div>
          <aside className="f-ondemand-right">
            <div className="f-ondemand-list">
              <div className="f-ondemand-row">
                <span className="f-ondemand-num">01</span>
                <div className="f-ondemand-text">
                  <strong>Academy aziendale completa</strong>
                  <span>Piattaforma dedicata, catalogo curato e curve di apprendimento per ruolo.</span>
                </div>
              </div>
              <div className="f-ondemand-row">
                <span className="f-ondemand-num">02</span>
                <div className="f-ondemand-text">
                  <strong>Onboarding nuovi assunti</strong>
                  <span>Percorsi di ingresso strutturati su valori, processi e strumenti aziendali.</span>
                </div>
              </div>
              <div className="f-ondemand-row">
                <span className="f-ondemand-num">03</span>
                <div className="f-ondemand-text">
                  <strong>Aggiornamenti normativi dedicati</strong>
                  <span>Moduli su misura su nuove norme, procedure interne e adempimenti settoriali.</span>
                </div>
              </div>
              <div className="f-ondemand-row">
                <span className="f-ondemand-num">04</span>
                <div className="f-ondemand-text">
                  <strong>Percorsi tecnici di settore</strong>
                  <span>Contenuti verticali su processi produttivi, sistemi gestionali e know-how interno.</span>
                </div>
              </div>
              <div className="f-ondemand-row">
                <span className="f-ondemand-num">05</span>
                <div className="f-ondemand-text">
                  <strong>Soft skills e leadership</strong>
                  <span>Percorsi di sviluppo per team, manager e figure di coordinamento.</span>
                </div>
              </div>
              <div className="f-ondemand-row">
                <span className="f-ondemand-num">06</span>
                <div className="f-ondemand-text">
                  <strong>Pillole microlearning su misura</strong>
                  <span>Format Learn One Minute applicato ai contenuti e ai temi della tua azienda.</span>
                </div>
              </div>
            </div>
          </aside>
        </div>
      </section>

      {/* CTA / CONTATTI */}
      <section className="f-cta-band" id="contatti">
        <div className="f-cta-band-inner">
          <div>
            <span className="f-label f-label-light">Prenota demo</span>
            <h2 className="f-cta-h2">
              Vediamo insieme<br/>
              come strutturare<br/>
              il tuo piano formativo.
            </h2>
            <p className="f-cta-p">
              Demo gratuita della piattaforma, tour del catalogo e analisi
              dei fabbisogni formativi della tua organizzazione.
            </p>
            <div className="f-contact-meta">
              <div>
                <span className="f-meta-label f-meta-label-light">Email</span>
                <p>info@topspinconsulting.it</p>
              </div>
              <div>
                <span className="f-meta-label f-meta-label-light">Sede</span>
                <p>Via Nomentana 251<br/>00161 Roma</p>
              </div>
            </div>
          </div>
          <form className="f-form" onSubmit={(e) => {
            e.preventDefault();
            const fd = new FormData(e.currentTarget);
            const nome = (fd.get("nome") || "").toString().trim();
            const azienda = (fd.get("azienda") || "").toString().trim();
            const email = (fd.get("email") || "").toString().trim();
            const note = (fd.get("note") || "").toString().trim();
            const subject = `Richiesta demo — ${azienda || nome || "nuovo contatto"}`;
            const body =
              `Buongiorno,\n\nvorrei prenotare una demo della piattaforma e-learning Top Spin Consulting.\n\n` +
              `— Nome: ${nome || "\u2014"}\n` +
              `— Azienda: ${azienda || "\u2014"}\n` +
              `— Email: ${email || "\u2014"}\n\n` +
              `Note:\n${note || "\u2014"}\n\n` +
              `—\nInviato dal sito catalogo Top Spin Consulting`;
            const href =
              "mailto:info@topspinconsulting.it" +
              "?subject=" + encodeURIComponent(subject) +
              "&body=" + encodeURIComponent(body);
            window.location.href = href;
          }}>
            <div className="f-form-row">
              <input type="text" name="nome" placeholder="Nome e cognome" required/>
              <input type="text" name="azienda" placeholder="Azienda" required/>
            </div>
            <input type="email" name="email" placeholder="Email aziendale" required/>
            <textarea name="note" rows="3" placeholder="Quali corsi ti interessano? (opzionale)"></textarea>
            <p className="f-form-note">
              Cliccando su "Prenota demo" si aprirà il tuo client di posta con un'email già compilata e pronta da inviare a <strong>info@topspinconsulting.it</strong>.
            </p>
            <button type="submit" className="f-form-submit">
              Prenota demo
              <span className="f-arrow-circle f-arrow-circle-dark">→</span>
            </button>
          </form>
        </div>
      </section>

      <footer className="f-footer">
        <div className="f-footer-inner">
          <div className="f-footer-brand">
            <img src="assets/logo.png" alt="Top Spin Consulting"/>
            <p>Formazione, sicurezza e cultura organizzativa per aziende ed enti.</p>
          </div>
          <div>
            <span className="f-label">Catalogo</span>
            <ul className="f-footer-cats">
              {window.CATEGORIES.filter((c) => c.id !== "all").map((c) => (
                <li key={c.id}>
                  <a
                    href="#catalogo"
                    style={{ "--cat-color": window.CATEGORY_META[c.id].color }}
                    onClick={() => {
                      setFilter(c.id);
                    }}
                  >
                    <span className="f-footer-dot"></span>
                    {c.label}
                  </a>
                </li>
              ))}
            </ul>
          </div>
          <div>
            <span className="f-label">Contatti</span>
            <ul>
              <li>info@topspinconsulting.it</li>
              <li>Via Nomentana 251<br/>00161 Roma</li>
              <li>P.IVA 14667611009</li>
            </ul>
          </div>
        </div>
        <div className="f-footer-meta">© 2026 Top Spin Consulting srls · P.IVA 14667611009 · Via Nomentana 251, 00161 Roma · Catalogo Edizione 2026</div>
      </footer>
    </div>
  );
}

window.FinalVariant = FinalVariant;
