#!/bin/bash
# Post-tool checkpoint: update .session/checkpoint.md after Write/Edit operations
# This ensures session state is always recoverable after a crash
# NOTE: This script needs chmod +x to be executable
PROJECT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
DATE=$(date +%Y-%m-%d)
TIME=$(date +%H:%M:%S)

CHECKPOINT="$PROJECT_DIR/.session/checkpoint.md"

# Only run if .session/ exists (session is active)
if [ ! -d "$PROJECT_DIR/.session" ]; then
    exit 0
fi

# Get the file that was just modified from stdin (Claude Code passes tool input as JSON)
MODIFIED_FILE="unknown"
if [ -t 0 ]; then
    # No stdin available, use argument
    MODIFIED_FILE="${1:-unknown}"
else
    # Try to extract file_path from JSON input
    INPUT=$(cat)
    EXTRACTED=$(echo "$INPUT" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('tool_input',{}).get('file_path',''))" 2>/dev/null)
    if [ -n "$EXTRACTED" ]; then
        MODIFIED_FILE="$EXTRACTED"
    fi
fi

# Update the checkpoint timestamp
if [ -f "$CHECKPOINT" ]; then
    if [[ "$OSTYPE" == "darwin"* ]]; then
        sed -i '' "s/\*\*Last updated:\*\*.*/\*\*Last updated:\*\* $DATE $TIME/" "$CHECKPOINT" 2>/dev/null
    else
        sed -i "s/\*\*Last updated:\*\*.*/\*\*Last updated:\*\* $DATE $TIME/" "$CHECKPOINT" 2>/dev/null
    fi

    # Append to the "Key Files Modified" section if not already listed
    if [ "$MODIFIED_FILE" != "unknown" ]; then
        # Get relative path
        REL_PATH="${MODIFIED_FILE#$PROJECT_DIR/}"
        if ! grep -q "$REL_PATH" "$CHECKPOINT" 2>/dev/null; then
            echo "- \`$REL_PATH\` ($DATE $TIME)" >> "$CHECKPOINT"
        fi
    fi
fi
