#!/bin/bash
# =============================================================================
# PRE-COMMIT HOOK — docs up-to-date check (pinky-core)
# =============================================================================
# If src/pinky_core/ files are staged:
#   1. Regenerate badges (interrogate, coverage, noqa) and stage them.
#   2. Require AGENT.md to also be staged when files are added or deleted.
# If .pre-commit-config.yaml is staged:
#   3. Regenerate hooks_badge.svg and stage it.
# =============================================================================

SRC_STAGED=$(git diff --cached --name-only -- src/pinky_core/ | grep -v '__pycache__' | wc -l | tr -d ' ')
CONFIG_STAGED=$(git diff --cached --name-only -- .pre-commit-config.yaml | wc -l | tr -d ' ')

if [ "$SRC_STAGED" -eq 0 ] && [ "$CONFIG_STAGED" -eq 0 ]; then
    exit 0
fi

# 1. Hooks badge — regenerate when pre-commit config changes
if [ "$CONFIG_STAGED" -gt 0 ]; then
    python scripts/hooks/generate_ci_badges.py --hooks > /dev/null 2>&1
    git add docs/reference/generated/hooks_badge.svg 2>/dev/null
fi

# 2. Regenerate quality badges when src changes
if [ "$SRC_STAGED" -gt 0 ]; then
    git add docs/reference/generated/interrogate_badge.svg 2>/dev/null

    if [ -f ".cache/coverage/.coverage" ] && command -v genbadge > /dev/null 2>&1; then
        coverage xml --data-file=.cache/coverage/.coverage -o .cache/coverage/coverage.xml > /dev/null 2>&1
        genbadge coverage -i .cache/coverage/coverage.xml -o docs/reference/generated/coverage_badge.svg > /dev/null 2>&1
        git add docs/reference/generated/coverage_badge.svg 2>/dev/null
    fi

    python scripts/hooks/generate_ci_badges.py --noqa > /dev/null 2>&1
    git add docs/reference/generated/noqa_badge.svg 2>/dev/null
fi

# 3. Require AGENT.md when files are added or deleted
if [ "$SRC_STAGED" -gt 0 ]; then
    FILES_ADDED_OR_DELETED=$(git diff --cached --name-only --diff-filter=AD -- src/pinky_core/ | grep -v '__pycache__' | wc -l | tr -d ' ')

    if [ "$FILES_ADDED_OR_DELETED" -gt 0 ]; then
        AGENT_STAGED=$(git diff --cached --name-only -- AGENT.md | wc -l | tr -d ' ')
        if [ "$AGENT_STAGED" -eq 0 ]; then
            echo "❌ AGENT.md not staged."
            echo ""
            echo "   A file was added or removed from src/pinky_core/ — AGENT.md must be"
            echo "   reviewed (module inventory, scopes) and staged before committing."
            exit 1
        fi
    fi
fi

exit 0
