// v3-verifycode.jsx — Verifikasjonskode UTEN egen kategori.
// Koder er forventede og flyktige: brukeren utløser dem selv (logger inn) og
// venter på dem. De dukker derfor opp ØVERST PÅ FORSIDEN (Innkommende) når de
// kommer, auto-kopieres, og forsvinner av seg selv etter 5 minutter. Ingen
// menyrad, ingen liste, ingen innboks, ingen arkivering.
//
// Eksporterer: CODE_TTL, VerifyCard, LiveVerify, AFrontVerify, VerifyLifecycle.

const CODE_TTL = 300; // sek — 5 minutter

// m:ss med tabular mono
function fmtTTL(s) {
  const m = Math.floor(Math.max(0, s) / 60);
  const ss = String(Math.max(0, s) % 60).padStart(2, '0');
  return `${m}:${ss}`;
}

// Best-effort auto-kopiering. I sandkasse-iframe blokkeres clipboard, derfor
// MÅ promisen alltid ha en .catch(). I ekte app (brukergest + secure-context)
// virker den.
function autoCopy(text) {
  try { navigator.clipboard.writeText(text).catch(() => {}); } catch (e) { /* iframe */ }
}

const DEMO_CODE = { service: 'GitHub', code: '084 219', mono: 'GH', col: '#2d333b', context: 'Innloggingskode · gyldig i 5 minutter' };

// ── VerifyCard — presentasjon for de tre fasene ──────────────
// phase: 'idle' | 'active' | 'gone'.  urgent = seconds <= 60.
function VerifyCard({ phase, seconds, c = DEMO_CODE, onReplay }) {
  // Fase 1 · venter — stiplet, dempet rad
  if (phase === 'idle') {
    return (
      <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '14px 18px', borderRadius: 14,
        border: '1px dashed var(--line-strong)', color: 'var(--faint)', marginBottom: 18 }}>
        <span style={{ display: 'flex' }}><IconX name="shield" s={16} /></span>
        <span style={{ fontSize: 13.5 }}>Venter på innloggingskode fra {c.service}…</span>
        <span className="mono" style={{ marginLeft: 'auto', fontSize: 12 }}>—:—</span>
      </div>
    );
  }
  // Fase 4 · slettet — dempet kvittering
  if (phase === 'gone') {
    return (
      <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '13px 18px', borderRadius: 14,
        border: '1px solid var(--line)', background: 'var(--glass)', color: 'var(--faint)', marginBottom: 18 }}>
        <span style={{ display: 'flex' }}><IconX name="check" s={15} /></span>
        <span style={{ fontSize: 13 }}>Koden er slettet — ingen spor lagret.</span>
        {onReplay ? (
          <button onClick={onReplay} style={{ marginLeft: 'auto', padding: '6px 12px', borderRadius: 9, background: 'transparent',
            color: 'var(--muted)', border: '1px solid var(--line-strong)', cursor: 'pointer', fontFamily: 'Sora', fontSize: 12, display: 'flex', alignItems: 'center', gap: 6 }}>
            <IconX name="shield" s={13} /> Simuler ny kode
          </button>
        ) : null}
      </div>
    );
  }
  // Fase 2/3 · aktiv (urgent ≤ 60 s)
  const urgent = seconds <= 60;
  const frac = Math.max(0, Math.min(1, seconds / CODE_TTL));
  return (
    <div className="glass" style={{ borderRadius: 18, padding: '18px 20px', marginBottom: 22,
      borderColor: urgent ? 'color-mix(in oklab, var(--accent) 55%, transparent)' : 'color-mix(in oklab, var(--accent) 32%, transparent)',
      background: urgent ? 'color-mix(in oklab, var(--accent) 16%, transparent)' : 'var(--accent-soft)' }}>
      {/* header */}
      <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 14 }}>
        <span style={{ color: 'var(--accent)', display: 'flex' }}><IconX name="shield" s={15} /></span>
        <span className="mono" style={{ fontSize: 11.5, fontWeight: 600, letterSpacing: '0.08em', color: 'var(--accent)' }}>VERIFIKASJONSKODE · {c.service.toUpperCase()}</span>
        <span className="chip chip-accent" style={{ marginLeft: 'auto', fontSize: 10.5, padding: '3px 9px' }}>
          <IconX name="copy" s={12} /> Kopiert automatisk
        </span>
      </div>
      {/* code */}
      <div style={{ display: 'flex', alignItems: 'center', gap: 16 }}>
        <div className="ava" style={{ width: 40, height: 40, borderRadius: 12, fontSize: 12, background: c.col, color: '#fff' }}>{c.mono}</div>
        <div style={{ minWidth: 0, flex: 1 }}>
          <div className="mono" style={{ fontSize: 36, fontWeight: 600, letterSpacing: '0.10em', lineHeight: 1 }}>{c.code}</div>
          <div style={{ fontSize: 12, color: 'var(--muted)', marginTop: 6 }}>{c.context}</div>
        </div>
      </div>
      {/* countdown + actions */}
      <div style={{ display: 'flex', alignItems: 'center', gap: 12, marginTop: 16 }}>
        <span style={{ fontSize: 12.5, color: urgent ? 'var(--accent)' : 'var(--muted)' }}>
          slettes om <span className="mono tnum" style={{ fontWeight: 600 }}>{fmtTTL(seconds)}</span>
        </span>
        <button style={{ marginLeft: 'auto', padding: '7px 13px', borderRadius: 10, background: 'transparent', color: 'var(--fg)',
          border: '1px solid var(--line-strong)', cursor: 'pointer', fontFamily: 'Sora', fontSize: 12.5, display: 'flex', alignItems: 'center', gap: 6 }}>
          <IconX name="copy" s={13} /> Kopiér igjen
        </button>
        <button onClick={onReplay} style={{ padding: '7px 13px', borderRadius: 10, background: 'transparent', color: 'var(--muted)',
          border: '1px solid var(--line-strong)', cursor: 'pointer', fontFamily: 'Sora', fontSize: 12.5, display: 'flex', alignItems: 'center', gap: 6 }}>
          <IconX name="trash" s={13} /> Slett nå
        </button>
      </div>
      {/* tømmende stolpe */}
      <div style={{ height: 4, borderRadius: 3, background: 'var(--line-strong)', overflow: 'hidden', marginTop: 14 }}>
        <div style={{ width: `${frac * 100}%`, height: '100%', borderRadius: 3,
          background: urgent ? 'var(--accent)' : 'color-mix(in oklab, var(--accent) 70%, transparent)', transition: 'width 1s linear' }} />
      </div>
      <div style={{ fontSize: 11.5, color: 'var(--faint)', marginTop: 12, lineHeight: 1.5 }}>
        Koden lå aldri i innboksen. Den kopieres ved ankomst og forsvinner av seg selv — ingenting lagres eller arkiveres.
      </div>
    </div>
  );
}

// ── LiveVerify — levende tilstand (auto-kopi, nedtelling, selvslett) ─
function LiveVerify({ ttl = CODE_TTL, c = DEMO_CODE }) {
  const [phase, setPhase] = React.useState('active');
  const [seconds, setSeconds] = React.useState(ttl);

  // auto-kopi ved ankomst (best-effort; blokkeres i iframe)
  React.useEffect(() => { if (phase === 'active') autoCopy(c.code); }, [phase, c.code]);

  // 1s nedtelling; selvslett ved 0
  React.useEffect(() => {
    if (phase !== 'active') return;
    const id = setInterval(() => {
      setSeconds((s) => {
        if (s <= 1) { clearInterval(id); setPhase('gone'); return 0; }
        return s - 1;
      });
    }, 1000);
    return () => clearInterval(id);
  }, [phase]);

  const replay = () => { setSeconds(ttl); setPhase('active'); };
  return <VerifyCard phase={phase} seconds={seconds} c={c} onReplay={replay} />;
}

// ── AFrontVerify — hele forsiden MED levende kode øverst ──────
function AFrontVerify() {
  return (
    <div className="screen theme-dark"><div className="amb amb-dark" />
      <div style={{ position: 'relative', zIndex: 1, height: '100%', display: 'flex' }}>
        <RailV2 active="overview" omit={['verify']} />
        <div style={{ flex: 1, minWidth: 0, display: 'flex', flexDirection: 'column' }}>
          <TopbarV2 title="Innkommende" sub="Forsiden · verifikasjonskoden lever her, ikke i en kategori" />
          <div style={{ flex: 1, overflow: 'hidden', display: 'flex', justifyContent: 'center' }}>
            <div style={{ width: '100%', maxWidth: 720, padding: '28px 36px' }}>
              <LiveVerify />
              <CountHero />
              <Spotlight />
              <div style={{ display: 'flex', alignItems: 'center', gap: 9, margin: '26px 0 6px' }}>
                <span style={v2Label}>Kan vente</span>
                <span style={{ flex: 1, height: 1, background: 'var(--line)' }} />
                <span style={{ fontSize: 11.5, color: 'var(--faint)' }}>3 fra folk du kjenner</span>
              </div>
              {PEOPLE.slice(1).map((p, i) => <SoftRow key={i} p={p} />)}
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}

// ── VerifyLifecycle — statisk ark, fire faser ────────────────
function VerifyLifecycle() {
  const phases = [
    { tag: '1 · Venter', node: <VerifyCard phase="idle" seconds={0} />, note: 'Valgfritt — vises kun mens du er midt i en innlogging og venter.' },
    { tag: '2 · Kommet inn', node: <VerifyCard phase="active" seconds={228} />, note: 'Accent-tonet kort øverst på forsiden. Auto-kopiert. 5-min nedtelling.' },
    { tag: '3 · Snart borte', node: <VerifyCard phase="active" seconds={42} />, note: 'Under 60 s: accent på nedtelling og stolpe, sterkere kant/bakgrunn.' },
    { tag: '4 · Slettet', node: <VerifyCard phase="gone" seconds={0} />, note: 'Kollapser til en dempet kvittering. Ingenting lagret.' },
  ];
  return (
    <div className="screen theme-dark" style={{ padding: 0 }}><div className="amb amb-dark" />
      <div style={{ position: 'relative', zIndex: 1, padding: '40px 48px', height: '100%' }}>
        <div style={{ display: 'flex', alignItems: 'center', gap: 11, marginBottom: 8, color: 'var(--accent)' }}>
          <IconX name="shield" s={18} /><span className="mono" style={{ fontSize: 12, letterSpacing: '0.1em' }}>VERIFIKASJONSKODE · UTEN KATEGORI</span>
        </div>
        <h2 style={{ margin: 0, fontSize: 30, fontWeight: 600, letterSpacing: '-0.03em' }}>Forventet. Kopiert. Borte.</h2>
        <p style={{ maxWidth: 680, fontSize: 14.5, lineHeight: 1.6, color: 'var(--muted)', margin: '12px 0 30px' }}>
          Du vet når du venter på en kode. Den dukker opp øverst på forsiden, legges på utklippstavlen ved
          ankomst, og sletter seg selv etter fem minutter. Ingen menyrad, ingen innboks, ingen arkivering.
        </p>
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2,1fr)', gap: 20 }}>
          {phases.map((p, i) => (
            <div key={i}>
              <div style={{ ...v2Label, marginBottom: 10 }}>{p.tag}</div>
              {p.node}
              <div style={{ fontSize: 12, color: 'var(--faint)', marginTop: -8, lineHeight: 1.5 }}>{p.note}</div>
            </div>
          ))}
        </div>
      </div>
    </div>
  );
}

Object.assign(window, { CODE_TTL, VerifyCard, LiveVerify, AFrontVerify, VerifyLifecycle });
