#!/usr/bin/env bash
set -euo pipefail

RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo "── Running pre-commit checks ──"

# 1. Check for debugger statements
if git diff --cached --name-only -z | xargs -0 grep -l 'debugger\|console\.log\|console\.debug\|puts.*inspect\|pry\b\|binding\.pry\|ipdb\|traceback' 2>/dev/null; then
    echo ""
    echo -e "${RED}✗ Debugger statements found in staged files above.${NC}"
    echo "  Remove them before committing."
    exit 1
fi

# 2. Check for large files
THRESHOLD=$((5 * 1024 * 1024))  # 5MB
git diff --cached --name-only -z | xargs -0 stat -c '%s %n' 2>/dev/null | while read -r size path; do
    if [ "$size" -gt "$THRESHOLD" ] 2>/dev/null; then
        echo -e "${YELLOW}⚠ Large file staged: $path (${size} bytes)${NC}"
    fi
done

# 3. Check for merge conflicts
if git diff --cached --name-only -z | xargs -0 grep -l '<<<<<<< \|=======$\|>>>>>>> ' 2>/dev/null; then
    echo ""
    echo -e "${RED}✗ Merge conflict markers found in staged files above.${NC}"
    exit 1
fi

# 4. Check for TODO/FIXME (warn only)
TODOS=$(git diff --cached --name-only -z | xargs -0 grep -ln 'TODO\|FIXME\|HACK\|XXX' 2>/dev/null || true)
if [ -n "$TODOS" ]; then
    echo -e "${YELLOW}⚠ TODO/FIXME/HACK markers found in:${NC}"
    echo "$TODOS" | sed 's/^/  /'
fi

# 5. Check for trailing whitespace in staged files
if git diff --cached --check 2>&1 | grep -q 'trailing whitespace'; then
    echo ""
    echo -e "${RED}✗ Trailing whitespace found. Run: git diff --cached --check${NC}"
    exit 1
fi

echo -e "\033[0;32m✓ Pre-commit checks passed\033[0m"
