#!/bin/bash
# Git Pre-Commit Hook: Melo App Qualitäts-Gate
# Läuft automatisch vor jedem git commit

export FLUTTER="/home/dustin/development/flutter/bin/flutter"
export DART="/home/dustin/development/flutter/bin/dart"
export PATH="$HOME/development/flutter/bin:$PATH"

echo "🔍 Melo App Qualitäts-Gate gestartet..."

# Git reicht GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE an Hooks weiter. Flutter
# ermittelt seine Version per git im SDK-Verzeichnis — erbt es dabei GIT_DIR,
# liest es stattdessen DIESES Repo und erfindet daraus eine SDK-Version.
# Betrifft BEIDE Arbeitsbäume, nur unterschiedlich sichtbar:
#   verlinkter Worktree -> harter Abbruch ("SDK version is 0.0.0-unknown"),
#                          korrekte Commits werden abgelehnt
#   Haupt-Checkout      -> still: Flutter baut sein Werkzeug bei JEDEM Commit
#                          neu (ein bis zwei Minuten pro Commit)
# Gemessen: ohne GIT_DIR meldet Flutter 3.44.8/stable, mit GIT_DIR dagegen
# 3.48.0-0.2.pre und als Revision einen Commit AUS DIESEM REPO.
# Nebeneffekt: Flutter gibt dabei die Remote-URL aus — steht dort ein Token
# in der URL, landet es in der Hook-Ausgabe. Das unset schließt auch das.
ROOT="$(git rev-parse --show-toplevel)" || exit 1
unset GIT_DIR GIT_INDEX_FILE GIT_WORK_TREE GIT_PREFIX GIT_COMMON_DIR
cd "$ROOT" || exit 1

# 1. Dart Analyse
echo -n "  Prüfe: flutter analyze ... "

ANALYZE_OUTPUT=$($FLUTTER analyze 2>&1)
if echo "$ANALYZE_OUTPUT" | grep -q "No issues found"; then
    echo "✅"
else
    echo "❌ FEHLER!"
    echo "$ANALYZE_OUTPUT" | tail -20
    exit 1
fi

# 2. Tests
echo -n "  Prüfe: flutter test ... "
TEST_OUTPUT=$($FLUTTER test 2>&1)
if echo "$TEST_OUTPUT" | grep -q "All tests passed"; then
    echo "✅"
elif echo "$TEST_OUTPUT" | grep -q "No tests found"; then
    echo "⚠️  Keine Tests vorhanden (überspringe)"
else
    echo "❌ Tests fehlgeschlagen!"
    echo "$TEST_OUTPUT" | tail -20
    exit 1
fi

echo "✅ Alle Prüfungen bestanden! Commit wird freigegeben."
