#!/bin/bash
# Post-commit hook - Summary and TODO scanner
# Shows commit summary and scans for TODO comments in committed files

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}✅ Commit successful!${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""

# ============================================================================
# SHOW COMMIT SUMMARY
# ============================================================================
echo -e "${BLUE}📦 Commit Details:${NC}"
echo ""

# Show commit hash and message
COMMIT_HASH=$(git log -1 --pretty=format:"%h")
COMMIT_MSG=$(git log -1 --pretty=format:"%s")
COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an")

echo -e "  ${CYAN}Hash:${NC}    $COMMIT_HASH"
echo -e "  ${CYAN}Author:${NC}  $COMMIT_AUTHOR"
echo -e "  ${CYAN}Message:${NC} $COMMIT_MSG"
echo ""

# Show files changed
FILES_CHANGED=$(git diff-tree --no-commit-id --name-only -r HEAD | wc -l | tr -d ' ')
echo -e "  ${CYAN}Files changed:${NC} $FILES_CHANGED"

# Show stats
echo ""
git log -1 --stat --pretty="" | sed 's/^/  /'
echo ""

# ============================================================================
# SCAN FOR TODO/FIXME COMMENTS IN COMMITTED FILES
# ============================================================================
echo -e "${YELLOW}🔍 Scanning for TODO/FIXME comments in committed files...${NC}"
echo ""

# Get files from this commit
COMMITTED_FILES=$(git diff-tree --no-commit-id --name-only -r HEAD)

# Track TODO findings
TODO_COUNT=0
FIXME_COUNT=0

# Temporary file for TODOs
TODO_TMP=$(mktemp)

for file in $COMMITTED_FILES; do
    # Skip if file doesn't exist (deleted files)
    if [ ! -f "$file" ]; then
        continue
    fi

    # Search for TODO and FIXME comments
    if grep -n -i "TODO\|FIXME" "$file" > /dev/null 2>&1; then
        # Get the actual matches
        MATCHES=$(grep -n -i "TODO\|FIXME" "$file" || true)

        if [ -n "$MATCHES" ]; then
            echo "$MATCHES" | while IFS=: read -r line_num content; do
                # Determine type
                if echo "$content" | grep -i "TODO" > /dev/null; then
                    TODO_COUNT=$((TODO_COUNT + 1))
                    echo -e "  ${YELLOW}TODO${NC} - $file:$line_num"
                    echo "    $(echo $content | sed 's/^[[:space:]]*//')"
                elif echo "$content" | grep -i "FIXME" > /dev/null; then
                    FIXME_COUNT=$((FIXME_COUNT + 1))
                    echo -e "  ${RED}FIXME${NC} - $file:$line_num"
                    echo "    $(echo $content | sed 's/^[[:space:]]*//')"
                fi
            done
        fi
    fi
done

# Count all TODOs in the project (not just committed files)
TOTAL_TODOS=$(git grep -i "TODO:" 2>/dev/null | wc -l | tr -d ' ')
TOTAL_FIXMES=$(git grep -i "FIXME:" 2>/dev/null | wc -l | tr -d ' ')

echo ""
if [ "$TOTAL_TODOS" -gt 0 ] || [ "$TOTAL_FIXMES" -gt 0 ]; then
    echo -e "${CYAN}Project-wide summary:${NC}"
    [ "$TOTAL_TODOS" -gt 0 ] && echo -e "  ${YELLOW}TODO comments:${NC}  $TOTAL_TODOS"
    [ "$TOTAL_FIXMES" -gt 0 ] && echo -e "  ${RED}FIXME comments:${NC} $TOTAL_FIXMES"
    echo ""
    echo -e "${YELLOW}💡 Consider updating TODOS.md to track these items${NC}"
else
    echo -e "${GREEN}✓ No TODO/FIXME comments found${NC}"
fi

echo ""

# ============================================================================
# REMINDER ABOUT PUSH
# ============================================================================
# Check if we're ahead of remote
BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null)
if [ -n "$BRANCH" ]; then
    # Check if branch has remote tracking
    REMOTE=$(git config branch.$BRANCH.remote 2>/dev/null)
    if [ -n "$REMOTE" ]; then
        # Count commits ahead of remote
        AHEAD=$(git rev-list --count @{u}..HEAD 2>/dev/null || echo "0")
        if [ "$AHEAD" -gt 0 ]; then
            echo -e "${CYAN}📤 You have $AHEAD commit(s) ready to push${NC}"
            echo -e "   Run: ${YELLOW}git push${NC}"
            echo ""
        fi
    else
        echo -e "${YELLOW}💡 This branch doesn't have a remote tracking branch yet${NC}"
        echo -e "   To push: ${YELLOW}git push -u origin $BRANCH${NC}"
        echo ""
    fi
fi

# ============================================================================
# FOOTER
# ============================================================================
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""

exit 0
