/* global React */
const { useState: useLM } = React;

/*
  LeadMagnet — sähköpostimuotti oppaiden lataamiseen.
  Käyttö:
    <LeadMagnet
      title="Vakuutusmeklarin valintaopas"
      subtitle="12-sivuinen PDF — mitä kysyä, mitä vältellä, miten arvioida."
      bullets={["Valinnan checklist", "Hinnoittelun läpinäkyvyys", "Sopimuksen kompastuskivet"]}
      file="/oppaat/vakuutusmeklarin-valintaopas.pdf"
      slug="valintaopas"
      coverTone="navy" // "navy" | "ink" | "cream"
    />
*/
function LeadMagnet({ title, subtitle, bullets = [], file = "#", slug = "guide", coverEyebrow = "Opas", coverTone = "navy", coverNumber, layout = "card", anchor }) {
  const [vals, setVals] = useLM({ name: "", email: "", consent: false });
  const [errs, setErrs] = useLM({});
  const [done, setDone] = useLM(false);
  const setV = (k, v) => { setVals(s => ({ ...s, [k]: v })); setErrs(e => ({ ...e, [k]: null })); };

  const submit = (e) => {
    e.preventDefault();
    const er = {};
    if (!vals.name.trim()) er.name = "Anna nimesi.";
    if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(vals.email)) er.email = "Tarkista sähköpostiosoite.";
    if (!vals.consent) er.consent = "Suostumus tarvitaan.";
    if (Object.keys(er).length) {
      setErrs(er);
      setTimeout(() => {
        const k = Object.keys(er)[0];
        const el = document.querySelector(`[data-lm="${slug}"] [name="${k}"]`);
        if (el && el.focus) el.focus();
      }, 0);
      return;
    }
    setDone(true);
    if (typeof window.amTrack === "function") window.amTrack("lead_magnet_download", { slug, title });

    // Lähetä Formspreelle (fire-and-forget — ei estä PDF:n latausta vaikka epäonnistuisi)
    try {
      const formData = new FormData();
      formData.append("name", vals.name);
      formData.append("email", vals.email);
      formData.append("slug", slug);
      formData.append("title", title);
      formData.append("timestamp", new Date().toISOString());
      fetch("https://formspree.io/f/xgodzqpz", {
        method: "POST",
        body: formData,
        headers: { "Accept": "application/json" },
        keepalive: true,
      }).catch((err) => { console.error("Lead-magnet-lähetys epäonnistui:", err); });
    } catch (err) { console.error("Lead-magnet-lähetys epäonnistui:", err); }

    const winRef = window.open(file, "_blank", "noopener,noreferrer");
    setTimeout(() => {
      const a = document.createElement("a");
      a.href = file;
      a.download = (file.split("/").pop() || "opas.pdf");
      a.rel = "noopener";
      document.body.appendChild(a);
      a.click();
      a.remove();
      if (!winRef) { /* anchor-click hoitaa */ }
    }, 300);
  };

  const toneClass = "lm-cover-" + (coverTone || "navy");

  return (
    <aside id={anchor} className={"lm lm-" + layout} data-lm={slug} aria-labelledby={`lm-${slug}-h`}>
      <div className={"lm-cover " + toneClass} aria-hidden="true">
        {/* Kerros 1: takimmainen kansi (vihjailee pinosta) */}
        <span className="lm-cover-stack lm-cover-stack-back" aria-hidden="true"></span>
        <span className="lm-cover-stack lm-cover-stack-mid" aria-hidden="true"></span>
        {/* Kerros 2: itse kansi */}
        <div className="lm-cover-card">
          <div className="lm-cover-top">
            <span className="lm-cover-mono">Arvomeklarit</span>
            {coverNumber && <span className="lm-cover-num tnum">№ {coverNumber}</span>}
          </div>
          <div className="lm-cover-mid">
            <span className="lm-cover-eyebrow">{coverEyebrow}</span>
            <span className="lm-cover-title">{title}</span>
          </div>
          <div className="lm-cover-bot">
            <span className="lm-cover-rule" aria-hidden="true"></span>
            <span className="lm-cover-foot">Veloitukseton PDF</span>
          </div>
        </div>
      </div>

      <div className="lm-body">
        <p className="eyebrow lm-eyebrow">Veloitukseton opas</p>
        <h3 id={`lm-${slug}-h`}>{title}</h3>
        {subtitle && <p className="lm-sub">{subtitle}</p>}
        {bullets.length > 0 && (
          <ul className="lm-bullets" role="list">
            {bullets.map((b, i) => (
              <li key={i}>
                <span className="lm-tick" aria-hidden="true">
                  <svg width="14" height="14" viewBox="0 0 16 16" fill="none"><path d="M3 8.5l3 3 7-7" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"/></svg>
                </span>
                <span>{b}</span>
              </li>
            ))}
          </ul>
        )}

        {done ? (
          <div className="lm-done" role="status" aria-live="polite">
            <strong>Kiitos!</strong>
            <p>Opas avautui uuteen välilehteen ja lataus käynnistyi. Otamme yhteyttä, jos sinulla on lisäkysymyksiä — muuten olet vapaa lukemaan rauhassa.</p>
            <p className="lm-done-fallback">
              Eikö lataus käynnistynyt? <a href={file} target="_blank" rel="noopener">Avaa PDF tästä</a>.
            </p>
          </div>
        ) : (
          <form className="lm-form" onSubmit={submit} noValidate>
            <div className="lm-row">
              <label className="lm-label">
                <span>Nimi</span>
                <input type="text" name="name" autoComplete="name" value={vals.name} onChange={e => setV("name", e.target.value)} aria-invalid={!!errs.name} aria-describedby={errs.name ? `lm-${slug}-err-name` : undefined} required />
                {errs.name && <span id={`lm-${slug}-err-name`} className="lm-err" role="alert">{errs.name}</span>}
              </label>
              <label className="lm-label">
                <span>Sähköposti</span>
                <input type="email" name="email" autoComplete="email" value={vals.email} onChange={e => setV("email", e.target.value)} aria-invalid={!!errs.email} aria-describedby={errs.email ? `lm-${slug}-err-email` : undefined} required />
                {errs.email && <span id={`lm-${slug}-err-email`} className="lm-err" role="alert">{errs.email}</span>}
              </label>
            </div>
            <label className="lm-consent">
              <input type="checkbox" name="consent" checked={vals.consent} onChange={e => setV("consent", e.target.checked)} aria-invalid={!!errs.consent} aria-describedby={errs.consent ? `lm-${slug}-err-consent` : undefined} required />
              <span>Hyväksyn <a href="Tietosuoja.html">tietosuojaselosteen</a>. Emme lähetä uutiskirjeitä — vain pyytämäsi opas.</span>
            </label>
            {errs.consent && <span id={`lm-${slug}-err-consent`} className="lm-err lm-err-block" role="alert">{errs.consent}</span>}
            <div className="lm-actions">
              <button type="submit" className="btn btn-primary lm-submit">Lataa PDF →</button>
              <span className="lm-foot">Saat heti oppaan + sähköpostivahvistuksen. Ei roskapostia.</span>
            </div>
          </form>
        )}
      </div>

      <style>{`
        /* === Lead magnet -kortti === */
        .lm{
          display:grid;grid-template-columns:1fr;gap:40px;
          background:var(--bg);
          border:1px solid var(--line);
          border-radius:14px;
          padding:32px;
          align-items:stretch;
          max-width:1080px;
          position:relative;
          transition:border-color var(--t),box-shadow var(--t),transform var(--t);
        }
        .lm:hover{
          border-color:rgba(201,160,80,.45);
          box-shadow:0 24px 48px -28px rgba(31,41,55,.18);
        }
        @media(min-width:760px){
          .lm-card{grid-template-columns:280px 1fr;gap:56px;padding:44px 48px;}
        }
        @media(min-width:760px){
          .lm-inline{grid-template-columns:220px 1fr;gap:40px;padding:36px 40px;}
        }

        /* === Kansi (PDF-mockup) === */
        .lm-cover{
          position:relative;
          aspect-ratio:1/1.41;       /* A4-suhde */
          align-self:center;
          display:flex;
          align-items:stretch;
          justify-content:stretch;
        }
        /* Pinon vihje – kaksi laatikkoa pääkannen takana */
        .lm-cover-stack{
          position:absolute;
          inset:0;
          border-radius:4px;
          background:rgba(31,41,55,.06);
          border:1px solid rgba(31,41,55,.08);
        }
        .lm-cover-stack-back{
          transform:translate(8px,8px) rotate(1.5deg);
          opacity:.55;
        }
        .lm-cover-stack-mid{
          transform:translate(4px,4px) rotate(.6deg);
          opacity:.85;
        }
        .lm-cover-card{
          position:relative;z-index:2;
          flex:1;
          display:flex;flex-direction:column;justify-content:space-between;
          padding:22px 22px 20px;
          border-radius:4px;
          overflow:hidden;
          box-shadow:
            0 1px 0 rgba(255,255,255,.06) inset,
            0 18px 36px -18px rgba(31,41,55,.35),
            0 4px 8px -4px rgba(31,41,55,.18);
        }
        /* Sävyt — sininen, tumma, kerma */
        .lm-cover-navy .lm-cover-card{
          background:linear-gradient(160deg,#22408F 0%,#1E3A8A 55%,#16306e 100%);
          color:#fff;
        }
        .lm-cover-ink .lm-cover-card{
          background:linear-gradient(160deg,#2C3340 0%,#1F2937 55%,#161B23 100%);
          color:#fff;
        }
        .lm-cover-cream .lm-cover-card{
          background:linear-gradient(160deg,#F4EFE5 0%,#EDE6D6 55%,#E5DCC4 100%);
          color:var(--ink);
        }

        /* Kultainen pystysuora linja vasemmassa reunassa */
        .lm-cover-card::before{
          content:"";
          position:absolute;left:0;top:0;bottom:0;
          width:6px;
          background:var(--gold);
        }
        /* Hieno tausta-koriste – iso pyöreä lasinen kuvio kulmaan */
        .lm-cover-card::after{
          content:"";
          position:absolute;
          right:-60px;bottom:-60px;
          width:200px;height:200px;
          border-radius:50%;
          background:radial-gradient(circle,rgba(201,160,80,.22) 0%,rgba(201,160,80,0) 70%);
          pointer-events:none;
        }
        .lm-cover-cream .lm-cover-card::after{
          background:radial-gradient(circle,rgba(30,58,138,.10) 0%,rgba(30,58,138,0) 70%);
        }

        .lm-cover-top{
          display:flex;justify-content:space-between;align-items:flex-start;
          font-family:var(--sans);
          font-size:10px;
          letter-spacing:.18em;
          text-transform:uppercase;
          font-weight:500;
          opacity:.7;
        }
        .lm-cover-num{font-family:var(--serif);font-size:11px;letter-spacing:.06em;text-transform:none;opacity:.85}
        .lm-cover-mid{display:flex;flex-direction:column;gap:14px;margin:24px 0}
        .lm-cover-eyebrow{
          font-family:var(--sans);
          font-size:11px;letter-spacing:.16em;text-transform:uppercase;
          font-weight:500;
          opacity:.65;
        }
        .lm-cover-title{
          font-family:var(--serif);
          font-size:clamp(20px,2.2vw,26px);
          font-weight:600;
          line-height:1.18;
          letter-spacing:-.012em;
          text-wrap:balance;
        }
        .lm-cover-bot{display:flex;flex-direction:column;gap:10px}
        .lm-cover-rule{display:block;width:36px;height:1px;background:var(--gold);opacity:.85}
        .lm-cover-foot{
          font-family:var(--sans);
          font-size:10px;letter-spacing:.18em;text-transform:uppercase;
          font-weight:500;opacity:.55;
        }

        /* === Body === */
        .lm-body{display:flex;flex-direction:column;gap:14px}
        .lm-eyebrow{margin:0;color:var(--gold)}
        .lm-body h3{font-size:clamp(22px,2.2vw,28px);line-height:1.25;margin:0;letter-spacing:-.015em}
        .lm-sub{margin:0;color:var(--ink-2);font-size:16px;line-height:1.6;max-width:54ch}
        .lm-bullets{list-style:none;padding:0;margin:8px 0 16px;display:flex;flex-direction:column;gap:10px}
        .lm-bullets li{display:flex;align-items:flex-start;gap:12px;font-size:15px;color:var(--ink);line-height:1.5}
        .lm-tick{width:20px;height:20px;border-radius:50%;background:rgba(4,120,87,.10);color:var(--green);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}

        /* === Lomake === */
        .lm-form{display:flex;flex-direction:column;gap:14px;margin-top:8px;padding-top:20px;border-top:1px solid var(--line)}
        .lm-row{display:grid;grid-template-columns:1fr;gap:14px}
        @media(min-width:520px){.lm-row{grid-template-columns:1fr 1fr;gap:16px}}
        .lm-label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--ink-2);font-weight:500;letter-spacing:.08em;text-transform:uppercase}
        .lm-label input{
          font:inherit;font-size:16px;color:var(--ink);
          background:var(--bg);
          border:1px solid var(--line);
          border-radius:6px;
          padding:12px 14px;
          text-transform:none;letter-spacing:0;font-weight:400;
          font-family:var(--sans);
          transition:border-color var(--t),box-shadow var(--t);
        }
        .lm-label input:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px rgba(201,160,80,.18)}
        .lm-label input[aria-invalid="true"]{border-color:#B91C1C}
        .lm-err{font-size:13px;color:#B91C1C;font-weight:500;text-transform:none;letter-spacing:0;margin-top:2px}
        .lm-err-block{display:block;margin-top:-6px}
        .lm-consent{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:var(--ink-2);line-height:1.5}
        .lm-consent input{margin-top:3px;flex-shrink:0;width:18px;height:18px;accent-color:var(--gold)}
        .lm-consent a{color:var(--gold);border-bottom:1px solid var(--gold)}
        .lm-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:4px}
        .lm-submit{align-self:flex-start}
        .lm-foot{font-size:12px;color:var(--ink-2);font-style:italic;margin:0}

        /* === Done-tila === */
        .lm-done{padding:18px 22px;background:rgba(4,120,87,.06);border:1px solid rgba(4,120,87,.25);border-left:3px solid var(--green);border-radius:6px}
        .lm-done strong{display:block;font-family:var(--serif);font-size:18px;color:var(--green);margin-bottom:4px}
        .lm-done p{margin:0;font-size:14px;color:var(--ink-2);line-height:1.55}
        .lm-done .lm-done-fallback{margin-top:8px;font-size:13px}
        .lm-done .lm-done-fallback a{color:var(--gold);font-weight:500;border-bottom:1px solid var(--gold)}
      `}</style>
    </aside>
  );
}

window.LeadMagnet = LeadMagnet;
