#!/bin/bash
# =====================================================
# PostToolUse Hook - Workflow Plugin
# =====================================================
#
# Detects PR merge operations and prompts user to
# release active ticket.
#
# Performance: <50ms for non-match case (single grep)
#
# =====================================================

# Read tool use data from stdin (JSON format)
TOOL_DATA=$(cat)

# Fast check: grep for PR merge patterns
# Exit immediately if not a PR merge (performance critical)
if ! echo "$TOOL_DATA" | grep -qE 'gh pr merge|Merged pull request|Successfully merged'; then
    echo '{"continue": true}'
    exit 0
fi

# PR merge detected - extract details
TOOL_NAME=$(echo "$TOOL_DATA" | jq -r '.tool // "unknown"')
COMMAND=$(echo "$TOOL_DATA" | jq -r '.parameters.command // ""')
OUTPUT=$(echo "$TOOL_DATA" | jq -r '.output // ""')

# Only proceed if this was a Bash command
if [ "$TOOL_NAME" != "Bash" ]; then
    echo '{"continue": true}'
    exit 0
fi

# Extract PR number from command or output
PR_NUMBER=""

# Try to extract from gh pr merge command
if echo "$COMMAND" | grep -q "gh pr merge"; then
    PR_NUMBER=$(echo "$COMMAND" | grep -oP 'gh pr merge\s+\K\d+' || echo "")
fi

# If not found, try to extract from output
if [ -z "$PR_NUMBER" ]; then
    PR_NUMBER=$(echo "$OUTPUT" | grep -oP '#\K\d+' | head -1 || echo "")
fi

# Get active ticket
GIT_DIR="$(git rev-parse --git-dir 2>/dev/null || echo "")"
if [ -z "$GIT_DIR" ] || [ ! -f "$GIT_DIR/WORKFLOW_STATE" ]; then
    echo '{"continue": true}'
    exit 0
fi

ACTIVE_TICKET=$(jq -r '.activeTicket.id // "none"' "$GIT_DIR/WORKFLOW_STATE" 2>/dev/null || echo "none")

if [ "$ACTIVE_TICKET" = "none" ] || [ "$ACTIVE_TICKET" = "null" ]; then
    echo '{"continue": true}'
    exit 0
fi

# Build PR URL and get current branch
REPO_URL=$(git remote get-url origin 2>/dev/null | sed 's/\.git$//' | sed 's|git@github.com:|https://github.com/|')
if [ -n "$PR_NUMBER" ] && [ -n "$REPO_URL" ]; then
    PR_URL="${REPO_URL}/pull/${PR_NUMBER}"
else
    PR_URL=""
fi

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")

# Check if current branch is safe to delete (merged into main)
BRANCH_SAFE_DELETE=""
if [ -n "$CURRENT_BRANCH" ] && [ "$CURRENT_BRANCH" != "main" ] && [ "$CURRENT_BRANCH" != "master" ]; then
    # Check if branch is fully merged
    if git branch --merged main | grep -q "^[* ]*${CURRENT_BRANCH}$"; then
        BRANCH_SAFE_DELETE="$CURRENT_BRANCH"
    fi
fi

# Prompt user
PROMPT_MSG="🎉 PR"
if [ -n "$PR_NUMBER" ]; then
    PROMPT_MSG="$PROMPT_MSG #$PR_NUMBER"
fi
PROMPT_MSG="$PROMPT_MSG merged!

Active ticket: $ACTIVE_TICKET"

if [ -n "$BRANCH_SAFE_DELETE" ]; then
    PROMPT_MSG="$PROMPT_MSG
Current branch: $BRANCH_SAFE_DELETE (safe to delete)"
fi

PROMPT_MSG="$PROMPT_MSG

Would you like to:
- Release ticket $ACTIVE_TICKET and add completion comment to Linear?"

if [ -n "$BRANCH_SAFE_DELETE" ]; then
    PROMPT_MSG="$PROMPT_MSG
- Delete local branch $BRANCH_SAFE_DELETE (merged into main)?"
fi

# Output JSON response with prompt
cat <<EOF
{
    "continue": true,
    "message": "$PROMPT_MSG",
    "prompt": {
        "type": "confirm",
        "callback": {
            "command": "\${CLAUDE_PLUGIN_ROOT}/scripts/release-with-pr.sh",
            "args": ["$ACTIVE_TICKET", "$PR_NUMBER", "$PR_URL", "$BRANCH_SAFE_DELETE"]
        }
    }
}
EOF

exit 0
