#!/bin/sh
#
# Barrierefreiheits- und Qualitätsgate vor jedem Commit.
#
# WARUM AM COMMIT UND NICHT AM PUSH
# Dieses Projekt hat kein Fernarchiv. `git push` findet nie statt, ein
# pre-push-Hook wäre totes Konfigurat. Der Commit ist das einzige Ereignis,
# das tatsächlich eintritt.
#
# WARUM NUR DIE SCHNELLSTUFE
# Die Vollstufe (Bau + Playwright) dauert rund 73 Sekunden. Ein Gate, das
# bei jedem Zwischenstand so lange blockiert, wird nicht respektiert,
# sondern mit --no-verify abgeschaltet. Deshalb hier nur die Schnellstufe
# (rund 40 s) - und eine Erinnerung, wenn die Vollstufe zu lange her ist.
#
# UMGEHEN
# `git commit --no-verify` bleibt möglich und soll es bleiben. Ein
# Alleinentwickler braucht Zwischenstände. Wer umgeht, weiß, was er tut -
# die Veröffentlichungsliste verlangt die Vollstufe ohnehin.
#
# EINRICHTEN
# Hooks liegen versioniert unter .githooks/ und wirken erst nach
#   git config core.hooksPath .githooks
# Das erledigt `npm run hooks:einrichten` in app/, und `npm install` ruft es
# über das prepare-Skript von selbst auf.

set -e

wurzel=$(git rev-parse --show-toplevel)
stempel="$wurzel/.git/gate-stempel"

printf 'Gate (Schnellstufe): Typen, Linter, Tests …\n'

cd "$wurzel/app"
npm run --silent gate:schnell

# ── Erinnerung an die Vollstufe ────────────────────────────────────────────
# Kein Sperren, nur Sagen: Sperren erzeugt Umgehungsgewohnheiten, und die
# Vollstufe gehört ohnehin in die Veröffentlichungsliste.
if [ ! -f "$stempel" ]; then
    printf '\nHinweis: Die Vollstufe lief hier noch nie.\n'
    printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen -\n'
    printf 'nur dort laufen die Prüfungen im echten Fenster (Kontrast, Zielgrößen).\n'
elif [ -n "$(find "$wurzel/app/src" -newer "$stempel" -print -quit 2>/dev/null)" ]; then
    printf '\nHinweis: Seit dem letzten vollen Gate-Lauf hat sich der Quelltext geändert.\n'
    printf 'Vor dem Veröffentlichen bitte `npm run gate` in app/ ausführen.\n'
fi

printf '\nGate sauber: Typen, Linter, Tests - axe je Ansicht in jsdom.\n'
printf 'Kontrast und Zielgroessen prueft erst die Vollstufe im echten Fenster.\n'
