#!/bin/sh

# --- Intelligent Pre-Push Hook for pre-commit ---
# Führt strenge Validierungen nur auf geschützten Branches aus.

# 1. Definiere die geschützten Branches (Regex)
# Basierend auf deiner Releaser-Struktur sind das main, develop und release-Branches.
PROTECTED_BRANCHES='^(main|master|develop|release/.*)$'

# 2. pre-commit übergibt den Remote-Namen und die URL als Argumente.
# Die eigentlichen Refs werden über stdin übergeben.
while read local_ref local_sha remote_ref remote_sha; do

    # Extrahiere den Branch-Namen aus der Remote-Referenz (z.B. aus 'refs/heads/main' wird 'main')
    # Wir behandeln auch den Fall, dass ein Branch gelöscht wird (local_sha ist all-zeros)
    if [ "$local_sha" = "0000000000000000000000000000000000000000" ]; then
        # Branch wird gelöscht, keine Prüfung nötig
        continue
    fi

    REMOTE_BRANCH_NAME=$(echo "$remote_ref" | sed 's#refs/heads/##')

    # 3. Prüfe, ob der Ziel-Branch geschützt ist
    if echo "$REMOTE_BRANCH_NAME" | grep -Eq "$PROTECTED_BRANCHES"; then
        echo "---"
        echo "🚀 Pushing to protected branch: '$REMOTE_BRANCH_NAME'. Running full validation..."
        echo "---"

        # FÜHRE HIER DEINE STRENGEN BUILD-CHECKS AUS
        # Prüfe, ob pyproject.toml existiert (PEP 517 Build-Backend)
        if [ ! -f "pyproject.toml" ]; then
            echo "❌ Pre-push hook failed: 'pyproject.toml' not found for build on protected branch."
            exit 1
        fi

        echo "   (Validating wheel build via pyproject backend...)"

        # Stelle sicher, dass das build-Modul verfügbar ist (lazily installieren, falls nötig)
        if ! python -c "import build" >/dev/null 2>&1; then
            echo "   (Installing build backend...)"
            python -m pip install --quiet --upgrade build
        fi

        # Entferne alte dist-Artefakte, damit wir das frisch erzeugte Wheel prüfen
        rm -rf dist

        # Erzeuge Wheel-Artefakt basierend auf pyproject.toml
        python -m build --wheel
        if [ $? -ne 0 ]; then
            echo "❌ Pre-push hook failed: Build validation failed."
            exit 1
        fi

        # Optional: prüfe, ob das Wheel installiert werden kann
        TMP_ENV=$(mktemp -d)
        python -m venv "$TMP_ENV"
        VENV_PYTHON="$TMP_ENV/bin/python"
        if [ ! -x "$VENV_PYTHON" ]; then
            VENV_PYTHON="$TMP_ENV/Scripts/python.exe"
        fi
        WHEEL_FILE=$(ls dist/*.whl 2>/dev/null | tail -n 1)
        if [ -z "$WHEEL_FILE" ]; then
            echo "❌ Pre-push hook failed: Wheel artifact missing after build."
            rm -rf "$TMP_ENV"
            exit 1
        fi

        "$VENV_PYTHON" -m pip install --quiet "$WHEEL_FILE"
        if [ $? -ne 0 ]; then
            echo "❌ Pre-push hook failed: Wheel installation failed."
            rm -rf "$TMP_ENV"
            exit 1
        fi

        # Kurzer Smoke-Test: manifestguard --version
        "$VENV_PYTHON" -m manifestguard --version >/dev/null 2>&1
        STATUS=$?
        rm -rf "$TMP_ENV"

        if [ $STATUS -ne 0 ]; then
            echo "❌ Pre-push hook failed: Smoke test failed."
            exit 1
        fi

        echo "✅ Full validation successful for '$REMOTE_BRANCH_NAME'."

    else
        echo "---"
        echo "🌿 Pushing to feature branch: '$REMOTE_BRANCH_NAME'. Skipping full build validation."
        echo "---"
    fi
done

exit 0
