#!/bin/bash
# 0xRay Post-Commit Hook
# Runs activity logging, analytics, log cleanup, and auto-reflection after commit
# Does NOT block — runs in background

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"

COMMIT_SHA=$(git rev-parse HEAD)
BRANCH=$(git rev-parse --abbrev-ref HEAD)

# Run in background — never block git operations
(
  if command -v node >/dev/null 2>&1; then
    export HOOK_TYPE="post-commit"
    export COMMIT_SHA="$COMMIT_SHA"
    export BRANCH="$BRANCH"
    export PROJECT_ROOT="$PROJECT_ROOT"
    node "$PROJECT_ROOT/scripts/hooks/run-hook.js" post-commit 2>/dev/null || true
  fi
) &

# Load auto_reflection config from features.json
CONFIG_FILE="$PROJECT_ROOT/.opencode/strray/features.json"
MODE="minimal"
COMMIT_THRESHOLD=25
DAYS_THRESHOLD=14
AUTO_GENERATE=true
PROMPT_USER=true

if [ -f "$CONFIG_FILE" ]; then
  MODE=$(grep -o '"mode": *"[^"]*"' "$CONFIG_FILE" | cut -d'"' -f4)
  MODE=${MODE:-minimal}
  
  # Get thresholds based on mode
  case "$MODE" in
    full)
      COMMIT_THRESHOLD=10
      DAYS_THRESHOLD=5
      AUTO_GENERATE=true
      PROMPT_USER=true
      ;;
    minimal)
      COMMIT_THRESHOLD=25
      DAYS_THRESHOLD=14
      AUTO_GENERATE=true
      PROMPT_USER=true
      ;;
    off)
      COMMIT_THRESHOLD=999
      DAYS_THRESHOLD=365
      AUTO_GENERATE=false
      PROMPT_USER=false
      ;;
  esac
fi

# Check if this was a significant commit - prompt for reflection
COMMIT_MSG=$(git log -1 --pretty=%B)
SIGNIFICANT_KEYWORDS="fix|bug|debug|deploy|release|feature|refactor|kernel|learning|pattern|wire|connect|integrate"

if echo "$COMMIT_MSG" | grep -qiE "$SIGNIFICANT_KEYWORDS" && [ "$PROMPT_USER" = true ]; then
  echo ""
  echo "📝 REFLECTION SUGGESTION: This commit appears to involve significant changes."
  echo "   Consider writing a reflection using the v3.0 template:"
  echo "   → cat docs/reflections/TEMPLATE_v3.md"
  echo ""
  echo "   To validate a reflection before committing:"
  echo "   → ./scripts/node/reflection-validate.sh <path-to-reflection>"
  echo ""
fi

# Auto-reflection check - count commits since last reflection
if [ "$AUTO_GENERATE" = true ] && [ -d "$PROJECT_ROOT/docs/reflections" ]; then
  LAST_REFLECTION=$(find "$PROJECT_ROOT/docs/reflections" -name "*.md" -type f -exec stat --format="%Y" {} \; 2>/dev/null | sort -rn | head -1)
  
  if [ -n "$LAST_REFLECTION" ]; then
    REFLECTION_EPOCH=$(date -r "$LAST_REFLECTION" +%s 2>/dev/null || echo "0")
    NOW_EPOCH=$(date +%s)
    DAYS_SINCE=$(( (NOW_EPOCH - REFLECTION_EPOCH) / 86400 ))
    
    # Also count commits since then
    COMMITS_SINCE=$(git log --since="$LAST_REFLECTION" --oneline 2>/dev/null | wc -l | tr -d ' ')
  else
    DAYS_SINCE=999
    COMMITS_SINCE=$(git rev-list --count HEAD 2>/dev/null || echo "0")
  fi
  
  # Threshold check
  if [ "$COMMITS_SINCE" -gt "$COMMIT_THRESHOLD" ] || [ "$DAYS_SINCE" -gt "$DAYS_THRESHOLD" ]; then
    echo ""
    echo "⚠️  AUTO-REFLECTION TRIGGERED (mode: $MODE)"
    echo "   $COMMITS_SINCE commits since last reflection ($DAYS_SINCE days)"
    echo "   Thresholds: $COMMIT_THRESHOLD commits, $DAYS_THRESHOLD days"
    echo ""
    
    if [ "$MODE" != "off" ]; then
      # Generate reflection stub
      cd "$PROJECT_ROOT"
      node scripts/node/auto-reflection-generator.mjs --trigger commit-threshold \
        --title "Multiple commits since last reflection" 2>/dev/null || true
      
      GENERATED_FILE=$(ls -t docs/reflections/auto-commit-*.md 2>/dev/null | head -1)
      if [ -n "$GENERATED_FILE" ]; then
        echo "   ✅ Generated: $GENERATED_FILE"
        echo "   → Fill in the details and commit"
      fi
    else
      echo "   Auto-reflection is OFF. Set mode to 'full' or 'minimal' in features.json to enable."
    fi
  fi
fi

exit 0
