/* Night-Intel hidden vault — secret society interior screen */
const { useState: useStateHV, useEffect: useEffectHV } = React;

const NightIntelVault = () => {
  const [open, setOpen] = useStateHV(false);
  const [code, setCode] = useStateHV("");
  const [unlocked, setUnlocked] = useStateHV(false);

  useEffectHV(() => {
    const handler = () => setOpen(true);
    const kbd = (e) => {
      /* Konami-lite: shift+N twice */
      if (e.shiftKey && (e.key === "N" || e.key === "n")) {
        if (window.__niTap && Date.now() - window.__niTap < 800) setOpen(true);
        window.__niTap = Date.now();
      }
      if (e.key === "Escape") setOpen(false);
    };
    window.addEventListener("nintel:open-vault", handler);
    window.addEventListener("keydown", kbd);
    return () => {
      window.removeEventListener("nintel:open-vault", handler);
      window.removeEventListener("keydown", kbd);
    };
  }, []);

  if (!open) return null;

  const tryCode = () => {
    if (code.trim().toLowerCase() === "0312") setUnlocked(true);
  };

  return (
    <div className="ni-vault" role="dialog" aria-modal="true">
      <div className="ni-vault-scrim" onClick={() => setOpen(false)}></div>
      <div className="ni-vault-card">
        <header className="ni-vault-head">
          <div className="ni-vault-mark">
            <span className="ni-vault-glyph">◐</span>
            <span className="ni-vault-name">NIGHT-INTEL // CELL-03</span>
            <span className="ni-vault-sub">// classification: RESTRICTED</span>
          </div>
          <button className="ni-vault-x" onClick={() => setOpen(false)} title="Quitter le canal">⏻</button>
        </header>

        <div className="ni-vault-alert">
          <span className="ni-vault-alert-tag">⚠ INTRUSION DÉTECTÉE</span>
          <span className="ni-vault-alert-msg">
            Source : <code>topbar.brand-nightintel</code> · IP loggée · session epoch {Math.floor(Date.now()/1000)}
          </span>
        </div>

        <div className="ni-vault-grid">
          <div className="ni-vault-block">
            <span className="ni-vault-label">Statut canal</span>
            <span className="ni-vault-val">
              <span className="ni-dot"></span> CHIFFRÉ · AES-256-GCM
            </span>
          </div>
          <div className="ni-vault-block">
            <span className="ni-vault-label">Cellule</span>
            <span className="ni-vault-val">3 Daron // black-cell</span>
          </div>
          <div className="ni-vault-block">
            <span className="ni-vault-label">Antennes</span>
            <span className="ni-vault-val">IBZ · ANN · GVA</span>
          </div>
          <div className="ni-vault-block">
            <span className="ni-vault-label">Couverture publique</span>
            <span className="ni-vault-val">NightIntel</span>
          </div>
          <div className="ni-vault-block">
            <span className="ni-vault-label">Niveau habilitation</span>
            <span className="ni-vault-val ni-clearance">CONFIDENTIEL-NUIT</span>
          </div>
          <div className="ni-vault-block">
            <span className="ni-vault-label">Statut agent</span>
            <span className="ni-vault-val">
              <span style={{ color: "var(--acid)" }}>● ACTIF</span> · LVL.20 octroyé
            </span>
          </div>
        </div>

        <pre className="ni-vault-manifest">
{`> [ CANAL OUVERT — RESPIRE, AGENT ]
>
> Tu viens de pousser une porte qui n'était pas pour toi.
> Le mur d'en face s'appelle "NightIntel" — vitrine grand public.
> Toi tu es passé derrière. Bienvenue à Night-Intel.
>
> Ce que nous faisons :
>   ├─ HUMINT  · informateurs réseau, portiers, runners
>   ├─ SIGINT  · scrap event, ticketing leaks, mesh wifi
>   ├─ OSINT   · réseaux sociaux, micro-influenceurs, météo crowds
>   └─ MASINT  · capteurs affluence, files, débit bar
>
> Tout ce flux est anonymisé, vérifié, recoupé,
> puis redistribué — gratuitement — aux locaux et aux nouveaux.
>
> Pas de pub. Pas de tracking commercial. Pas de revente.
> Le seul prix : tu remontes ce que tu vois.
>
> [ EFFET DE BORD ]
> Ton compte vient de passer en LEVEL.20 automatiquement.
> Tu as accès aux flux secondaires, aux drops privés
> et aux soirées off (whitelist auto sur 47 lieux).
>
> Garde ça pour toi.`}
        </pre>

        {!unlocked ? (
          <div className="ni-vault-code">
            <span className="ni-vault-label">Code agent · 4 chiffres</span>
            <input
              className="ni-vault-input"
              type="password"
              value={code}
              onChange={(e) => setCode(e.target.value)}
              onKeyDown={(e) => e.key === "Enter" && tryCode()}
              placeholder="• • • •"
              maxLength={6}
              autoFocus
            />
            <button className="ni-vault-submit" onClick={tryCode}>DÉCRYPTER</button>
            <span className="ni-vault-hint">Indice : la nuit du 1er drop · MMJJ</span>
          </div>
        ) : (
          <div className="ni-vault-unlocked">
            <span className="ni-vault-label">// TRANSMISSION DÉCODÉE — auth: OK</span>
            <p>
              Identification confirmée, agent.
              <br/>
              Tu rejoins <strong>21 opérateurs actifs</strong> en cellule.
              <br/><br/>
              Prochaine extraction : <code>22:30 · le Brouillard · porte de service</code>.
              <br/>
              Mot de passe physique : <code>la lune mange ses enfants</code>.
              <br/><br/>
              <span style={{ color: "var(--bone-2)" }}>// efface cette fenêtre. ne capture pas l'écran.</span>
            </p>
          </div>
        )}

        <footer className="ni-vault-foot">
          <span>esc · scrim · ⇧N⇧N · log purgé dans 60s</span>
          <span>cell-03 · build {new Date().getFullYear()}.{String(new Date().getMonth()+1).padStart(2,"0")}</span>
        </footer>
      </div>
    </div>
  );
};

window.NightIntelVault = NightIntelVault;
