#!/bin/bash
# Prepare commit message hook: auto-generate commit message based on changes

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2

# Only suggest message for regular commits (not merge, squash, etc.)
if [ -z "$COMMIT_SOURCE" ] || [ "$COMMIT_SOURCE" = "message" ]; then
    # Get list of changed files
    CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
    
    if [ -z "$CHANGED_FILES" ]; then
        exit 0
    fi
    
    # Determine commit type based on changed files
    if echo "$CHANGED_FILES" | grep -q "backend/"; then
        PREFIX="backend:"
    elif echo "$CHANGED_FILES" | grep -q "frontend/"; then
        PREFIX="frontend:"
    elif echo "$CHANGED_FILES" | grep -q "\.github\|\.gitea\|deploy\|docker"; then
        PREFIX="deploy:"
    else
        PREFIX="chore:"
    fi
    
    # Count files
    FILE_COUNT=$(echo "$CHANGED_FILES" | wc -l | tr -d ' ')
    
    # Generate suggested message
    if [ "$FILE_COUNT" -eq 1 ]; then
        FILENAME=$(basename "$CHANGED_FILES")
        SUGGESTED_MSG="$PREFIX update $FILENAME"
    else
        SUGGESTED_MSG="$PREFIX update $FILE_COUNT files"
    fi
    
    # If message file is empty or has default template, add suggestion
    if [ ! -s "$COMMIT_MSG_FILE" ] || ! grep -v '^#' "$COMMIT_MSG_FILE" | grep -q '[^[:space:]]'; then
        echo "$SUGGESTED_MSG" > "$COMMIT_MSG_FILE"
        echo "" >> "$COMMIT_MSG_FILE"
        echo "# Suggested commit message generated based on changes" >> "$COMMIT_MSG_FILE"
        echo "# Changed files:" >> "$COMMIT_MSG_FILE"
        echo "$CHANGED_FILES" | sed 's/^/#   /' >> "$COMMIT_MSG_FILE"
    fi
fi
