/* =============================================================
   ki.solidlab.no — landingsside for KI-rådgivning.
   Statisk side, JSX kompilert i nettleseren. Samme designspråk
   som solidlab.no: colors_and_type.css + site.css + ki.css.
   ============================================================= */

const { useState, useEffect, useRef } = React;

/* Mobil viser selvtesten som trekkspill: svaret åpnes rett under
   nivået du trykker på, sa du slipper a scrolle for a se det.
   Samme grep som seksjon 03 pa solidlab.no. */
function useMobil(brekk) {
  const sporring = "(max-width: " + (brekk || 760) + "px)";
  const [mobil, setMobil] = useState(
    () => typeof window !== "undefined" && window.matchMedia(sporring).matches
  );
  useEffect(() => {
    const mq = window.matchMedia(sporring);
    const ved = (e) => setMobil(e.matches);
    setMobil(mq.matches);
    if (mq.addEventListener) mq.addEventListener("change", ved);
    else mq.addListener(ved);
    return () => {
      if (mq.removeEventListener) mq.removeEventListener("change", ved);
      else mq.removeListener(ved);
    };
  }, [sporring]);
  return mobil;
}

const rullTil = (id) => {
  const el = document.getElementById(id);
  if (el) el.scrollIntoView({ behavior: "smooth", block: "start" });
};

/* Alle handlingsknapper apner skjemaet. E-post og telefon nederst
   i kontaktseksjonen er fortsatt ekte mailto:/tel:-lenker - det er
   kontaktinfo, ikke en knapp. */

/* ============ HEADER ============ */
function Header() {
  return (
    <header className="sl-header">
      <div className="shell sl-header__inner">
        <a className="sl-wm" href="https://solidlab.no">
          <span className="sl-wm__solid">solid</span>
          <span className="sl-wm__lab">lab</span>
          <span className="sl-wm__ai">.no</span>
        </a>
        <a className="ki-tilbake" href="https://solidlab.no">
          <span className="ki-tilbake__pil" aria-hidden="true">←</span> alle tjenester
        </a>
      </div>
    </header>
  );
}

/* ============ HERO ============ */
function Hero() {
  const h = INNHOLD.hero;
  return (
    <section className="sl-section ki-hero">
      <div className="shell">
        <div className="sl-slash ki-hero__stikkord">{h.stikkord}</div>
        <h1 className="ki-hero__tittel">
          {h.tittel_for}<strong>{h.tittel_uthevet}</strong>
        </h1>
        <p className="ki-hero__ingress">{h.ingress}</p>
        <div className="ki-hero__knapper">
          <button className="ki-knapp ki-knapp--fylt" onClick={() => apneKiSkjema()}>{h.cta}</button>
          <button className="ki-knapp ki-knapp--tom" onClick={() => rullTil("selvtest")}>
            {h.cta_sekundar}
          </button>
        </div>
      </div>
    </section>
  );
}

/* ============ 01 — SELVTEST ============ */
function Selvtest() {
  const s = INNHOLD.selvtest;
  const [valgt, setValgt] = useState(s.nivaaer[0]);
  const [lukket, setLukket] = useState(false);
  const mobil = useMobil(760);

  /* Ingen manuell scrollkorreksjon her - med vilje.
     Nettleseren gjor dette selv (scroll anchoring) nar innhold over
     viewporten endrer hoyde. Legger vi var egen scrollBy oppa,
     kompenserer begge for det samme og siden skyter til topps pa
     ekte mobil. Seksjon 03 pa solidlab.no gjor heller ingenting,
     og oppleves rolig nettopp derfor. */
  const velg = (n) => {
    if (n.id === valgt.id) { setLukket((l) => !l); return; }
    setValgt(n); setLukket(false);
  };

  const svar = (n) => (
    <div className="ki-svar">
      <h3 className="ki-svar__tittel">{n.overskrift}</h3>
      <p className="ki-svar__tekst">{n.tekst}</p>
      <div className="ki-svar__neste">{n.neste}</div>
      <div className="ki-svar__signal">
        <span className="ki-svar__signal-merke" aria-hidden="true">!</span>
        {n.signal}
      </div>
      <button className="ki-knapp ki-knapp--fylt ki-svar__cta"
              onClick={() => apneKiSkjema(n.navn)}>
        Ta en prat om dette →
      </button>
    </div>
  );

  const knappInnhold = (n) => (
    <React.Fragment>
      <span className="ki-niva__nr">{n.nr}</span>
      <span className="ki-niva__navn">{n.navn}</span>
      <span className="ki-niva__kort">{n.kort}</span>
    </React.Fragment>
  );

  return (
    <section className="sl-section ki-selvtest" id="selvtest">
      <div className="shell">
        <div className="sl-slash">{s.merke}</div>
        <div className="sl-section__head">
          <h2 className="sl-section__title">{s.tittel}</h2>
          <p className="sl-section__intro">{s.ingress}</p>
        </div>

        {mobil ? (
          <div className="ki-nivaaer ki-nivaaer--trekkspill" role="tablist"
               aria-label="Velg nivå">
            {s.nivaaer.map((n) => {
              const apen = valgt.id === n.id && !lukket;
              return (
                <div className="ki-rad" key={n.id}>
                  <button role="tab" aria-selected={valgt.id === n.id} aria-expanded={apen}
                          aria-controls={"ki-panel-" + n.id}
                          className={"ki-niva" + (valgt.id === n.id ? " ki-niva--aktiv" : "")
                                     + (apen ? " ki-niva--apen" : "")}
                          onClick={() => velg(n)}>
                    {knappInnhold(n)}
                    <span className="ki-niva__krok" aria-hidden="true">&#8250;</span>
                  </button>
                  {apen && (
                    <div className="ki-panel" id={"ki-panel-" + n.id} role="tabpanel">
                      {svar(n)}
                    </div>
                  )}
                </div>
              );
            })}
          </div>
        ) : (
          <div className="ki-selvtest__grid">
            <div className="ki-nivaaer" role="tablist" aria-orientation="vertical"
                 aria-label="Velg nivå">
              {s.nivaaer.map((n) => (
                <button key={n.id} role="tab" aria-selected={valgt.id === n.id}
                        className={"ki-niva" + (valgt.id === n.id ? " ki-niva--aktiv" : "")}
                        onClick={() => velg(n)}>
                  {knappInnhold(n)}
                </button>
              ))}
            </div>
            <div className="ki-svar-plass" key={valgt.id}>{svar(valgt)}</div>
          </div>
        )}
      </div>
    </section>
  );
}

/* ============ 02 — HVOR DET STOPPER ============ */
function Stopper() {
  const s = INNHOLD.stopper;
  return (
    <section className="sl-section ki-stopper">
      <div className="shell">
        <div className="sl-slash">{s.merke}</div>
        <div className="sl-section__head">
          <h2 className="sl-section__title">{s.tittel}</h2>
          <p className="sl-section__intro">{s.ingress}</p>
        </div>
        <div className="ki-kort-rad">
          {s.punkter.map((p) => (
            <article className="ki-kort" key={p.nr}>
              <div className="ki-kort__nr">{p.nr}</div>
              <h3 className="ki-kort__tittel">{p.tittel}</h3>
              <p className="ki-kort__tekst">{p.tekst}</p>
            </article>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ============ 03 — SLIK JOBBER VI ============ */
function Metode() {
  const m = INNHOLD.metode;
  return (
    <section className="sl-section ki-metode">
      <div className="shell">
        <div className="sl-slash">{m.merke}</div>
        <div className="sl-section__head">
          <h2 className="sl-section__title">{m.tittel}</h2>
          <p className="sl-section__intro">{m.ingress}</p>
        </div>
        <ol className="ki-steg">
          {m.steg.map((s) => (
            <li className="ki-steg__item" key={s.nr}>
              <div className="ki-steg__nr">{s.nr}</div>
              <h3 className="ki-steg__tittel">{s.tittel}</h3>
              <p className="ki-steg__tekst">{s.tekst}</p>
            </li>
          ))}
        </ol>
        <div className="ki-kjedelige">
          <h3 className="ki-kjedelige__tittel">{m.kjedelige_tittel}</h3>
          <ul className="ki-kjedelige__liste">
            {m.kjedelige.map((k, i) => (
              <li key={i}><span aria-hidden="true">→</span> {k}</li>
            ))}
          </ul>
        </div>
      </div>
    </section>
  );
}

/* ============ 04 — I PRAKSIS ============ */
/* Mork flate som bryter opp siden, i slekt med footeren. Vi navngir
   prosjektene, men beskriver dem ikke i detalj enna. */
function Praksis() {
  const p = INNHOLD.praksis;
  return (
    <section className="ki-praksis">
      <div className="shell">
        <div className="ki-praksis__panel">
          <div className="ki-praksis__rutenett" aria-hidden="true"></div>

          <div className="ki-praksis__innhold">
            <div className="sl-slash ki-praksis__merke">{p.merke}</div>

            <h2 className="ki-praksis__utsagn">
              {p.utsagn_for}<strong>{p.utsagn_uthevet}</strong>
            </h2>

            <div className="ki-praksis__tekst">
              {p.tekst.map((t, i) => <p key={i}>{t}</p>)}
            </div>

            <div className="ki-praksis__tall">
              {p.tall.map((t) => (
                <div className="ki-tall" key={t.merke}>
                  <div className="ki-tall__verdi">{t.verdi}</div>
                  <div className="ki-tall__merke">{t.merke}</div>
                </div>
              ))}
            </div>

            <div className="ki-praksis__prosjekter">
              <div className="sl-slash ki-praksis__prosjekt-merke">{p.prosjekt_merke}</div>
              <ul className="ki-prosjektliste">
                {p.prosjekter.map((pr) => (
                  <li className={"ki-prosjekt" + (pr.dempet ? " ki-prosjekt--dempet" : "")}
                      key={pr.navn}>
                    <span className="ki-prosjekt__prikk" aria-hidden="true"></span>
                    <span className="ki-prosjekt__navn">{pr.navn}</span>
                    <span className="ki-prosjekt__kort">{pr.kort}</span>
                  </li>
                ))}
              </ul>
            </div>

            <p className="ki-praksis__fot">{p.fot}</p>
          </div>
        </div>
      </div>
    </section>
  );
}

/* ============ 05 — KONTAKT ============ */
function Kontakt() {
  const k = INNHOLD.kontakt;
  return (
    <section className="sl-section ki-kontakt" id="kontakt">
      <div className="shell">
        <div className="sl-slash">{k.merke}</div>
        <h2 className="ki-kontakt__tittel">{k.tittel}</h2>
        <p className="ki-kontakt__ingress">{k.ingress}</p>
        <button className="ki-knapp ki-knapp--fylt" onClick={() => apneKiSkjema()}>{k.cta}</button>
        <div className="ki-kontakt__info">
          <div>
            <div className="sl-slash">/ e-post</div>
            <a href={"mailto:" + INNHOLD.kontaktinfo.epost}>{INNHOLD.kontaktinfo.epost}</a>
          </div>
          <div>
            <div className="sl-slash">/ telefon</div>
            <a href={"tel:" + INNHOLD.kontaktinfo.telefon.replace(/\s/g, "")}>
              {INNHOLD.kontaktinfo.telefon}
            </a>
          </div>
        </div>
      </div>
    </section>
  );
}

/* ============ FOOTER ============ */
function Footer() {
  const f = INNHOLD.footer;
  return (
    <footer className="sl-footer">
      <div className="shell sl-footer__inner">
        <div>
          {f.aar}
          <span className="sl-wm sl-wm--footer">
            <span className="sl-wm__solid">solid</span>
            <span className="sl-wm__lab">lab</span>
            <span className="sl-wm__ai">.no</span>
          </span>{" "}
          <span className="sl-footer__orgnr">{f.orgnr}</span>
        </div>
        <div className="sl-footer__right">
          <a href="https://solidlab.no">{f.lenke_solidlab}</a>
          <a href="https://solidlab.ai" target="_blank" rel="noopener noreferrer">{f.lenke_ai}</a>
          <a href="https://solidlab.no/legal/privacy">{f.lenke_personvern}</a>
          <a href={"mailto:" + INNHOLD.kontaktinfo.epost}>{INNHOLD.kontaktinfo.epost}</a>
        </div>
      </div>
    </footer>
  );
}

/* ============ APP ============ */
function App() {
  return (
    <>
      <Header/>
      <Hero/>
      <Selvtest/>
      <Stopper/>
      <Metode/>
      <Praksis/>
      <Kontakt/>
      <Footer/>
      <KiSkjema/>
      <Jens/>
    </>
  );
}
