/**
 * Hält fest, wann die Vollstufe des Gates zuletzt sauber durchlief.
 *
 * Der Stempel liegt in `.git/` und ist damit bewusst NICHT versioniert: Er
 * beschreibt den Zustand dieses einen Arbeitsplatzes, nicht den des Projekts.
 * Ein eingecheckter Stempel würde behaupten, bei jedem anderen sei die
 * Vollstufe auch schon gelaufen.
 *
 * Der pre-commit-Hook vergleicht sein Alter mit der jüngsten Änderung unter
 * `app/src` und erinnert, wenn der Quelltext seither weitergewandert ist.
 */
import { execFileSync } from 'node:child_process';
import { writeFileSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';

import { paketstand } from './paketstand.mjs';

const wurzel = execFileSync('git', ['rev-parse', '--show-toplevel'], {
  encoding: 'utf8',
}).trim();

const pfad = join(wurzel, '.git', 'gate-stempel');
writeFileSync(pfad, `${new Date().toISOString()}\n`, 'utf8');

process.stdout.write(`Gate vollständig durchlaufen. Stempel: ${pfad}\n`);

/*
  Und jetzt das, was der Bericht bisher verschwieg.

  Playwright zählt übersprungene Prüfungen nicht in die Zusammenfassung: Aus
  „119 bestanden“ wird „110 bestanden“, und die fehlenden fallen
  niemandem auf. Ein Gate, das nicht sagt, was es ausgelassen hat, behauptet
  mehr, als es geprüft hat – dieselbe Unwahrheit, gegen die `bauPruefen()`
  angelegt ist.

  Kein Fehlschlag, sondern eine Feststellung: `npm run gate` baut das Paket
  nicht mit, und ein Abbruch zwänge zu einem mehrminütigen `dist:win` vor
  jedem Lauf. Wer veröffentlicht, findet den Schritt in
  docs/veroeffentlichen.md.
*/
const appWurzel = dirname(dirname(fileURLToPath(import.meta.url)));
const paket = paketstand(appWurzel);

if (!paket.vorhanden || paket.veraltet) {
  process.stdout.write(
    `\nNICHT geprüft: e2e/gepackt.spec.ts – ${paket.grund}\n` +
      'Die gepackte Anwendung ist damit ungeprüft geblieben; vor einer ' +
      'Veröffentlichung ist das ein offener Punkt.\n',
  );
} else {
  process.stdout.write('Einschließlich der Prüfungen gegen das gebaute Paket.\n');
}
