#!/bin/bash
# bookMaker pre-commit hook
# 1. Staged .py: ruff check + py-compile
# 2. .py değiştiyse: INDEX.md + STATUS.md yenile ve stage'le
# Devre dışı bırakmak için: git commit --no-verify (önerilmez)

set -e

STAGED_PY=$(git diff --cached --name-only --diff-filter=ACM | grep '\.py$' || true)

if [ -z "$STAGED_PY" ]; then
    # Python değişikliği yok — sadece STATUS.md güncelle
    python3 tools/utils/update_status.py 2>/dev/null && git add STATUS.md 2>/dev/null || true
    exit 0
fi

NUM=$(echo "$STAGED_PY" | wc -l)
echo "[pre-commit] ${NUM} Python dosyası kontrol ediliyor..."

# 1. Sözdizimi kontrolü
for f in $STAGED_PY; do
    if ! python3 -m py_compile "$f" 2>&1; then
        echo "[pre-commit] HATA: Sözdizimi hatası → $f"
        echo "[pre-commit] Commit iptal edildi."
        exit 1
    fi
done

# 2. Ruff lint
if command -v ruff >/dev/null 2>&1; then
    if ! echo "$STAGED_PY" | xargs ruff check 2>&1; then
        echo "[pre-commit] HATA: Ruff lint başarısız."
        echo "[pre-commit] Düzelt: ruff check --fix <dosya>"
        echo "[pre-commit] Commit iptal edildi."
        exit 1
    fi
fi

echo "[pre-commit] OK (${NUM} dosya)"

# 3. src/ altında .py değiştiyse INDEX.md'yi yenile
SRC_PY=$(echo "$STAGED_PY" | grep '^src/' || true)
if [ -n "$SRC_PY" ]; then
    echo "[pre-commit] src/ değişti — INDEX.md yenileniyor..."
    python3 tools/utils/build_symbol_index.py
    git add INDEX.md
fi

# 4. STATUS.md her commit'te güncellenir
python3 tools/utils/update_status.py 2>/dev/null && git add STATUS.md 2>/dev/null || true

exit 0
