# PR Review Skill - Task Runner
# Run tasks with: just <recipe> [args...]

# Default recipe - show help
default:
    @just --list

# Directory containing scripts
scripts_dir := justfile_directory() / "scripts"

# Capture caller's directory (where just was invoked from)
caller_dir := invocation_directory()

# Get PR info (auto-detect or specify PR number)
# Runs from caller's directory to ensure git context is available
pr-info pr_number="":
    cd {{caller_dir}} && uv run {{scripts_dir}}/get_pr_info.py {{pr_number}}

# Fetch all review comments for a PR
fetch-comments owner repo pr_number:
    uv run {{scripts_dir}}/fetch_pr_comments.py {{owner}} {{repo}} {{pr_number}}

# Fetch review threads with resolution status
fetch-threads owner repo pr_number:
    uv run {{scripts_dir}}/fetch_review_threads.py {{owner}} {{repo}} {{pr_number}}

# Reply to a specific comment (body can contain markdown/special chars)
# Uses heredoc with quoted delimiter to prevent shell interpretation of backticks, $, etc.
reply owner repo pr_number comment_id body:
    #!/usr/bin/env bash
    cat <<'BODY_EOF' | uv run "{{scripts_dir}}/reply_to_comment.py" "{{owner}}" "{{repo}}" "{{pr_number}}" "{{comment_id}}" --stdin
    {{body}}
    BODY_EOF

# Resolve a review thread
resolve thread_id:
    uv run {{scripts_dir}}/resolve_thread.py {{thread_id}}

# Request re-review with summary comment (body can contain markdown/special chars)
# Uses heredoc with quoted delimiter to prevent shell interpretation of backticks, $, etc.
request-review owner repo pr_number body:
    #!/usr/bin/env bash
    cat <<'BODY_EOF' | uv run "{{scripts_dir}}/request_review.py" "{{owner}}" "{{repo}}" "{{pr_number}}" --stdin
    {{body}}
    BODY_EOF

# Merge a PR (method: merge, squash, or rebase)
# Runs from caller's directory to ensure git context is available
merge pr_number method="squash":
    cd {{caller_dir}} && uv run {{scripts_dir}}/merge_pr.py {{pr_number}} {{method}}

# Fetch all unresolved threads (convenience wrapper)
unresolved owner repo pr_number:
    #!/usr/bin/env bash
    uv run {{scripts_dir}}/fetch_review_threads.py {{owner}} {{repo}} {{pr_number}} | \
        jq '[.[] | select(.is_resolved == false)]'

# Full PR review data (info + threads + comments)
# Runs from caller's directory to ensure git context is available
full-review owner repo pr_number:
    #!/usr/bin/env bash
    cd {{caller_dir}}
    echo "=== PR Info ==="
    uv run {{scripts_dir}}/get_pr_info.py {{pr_number}}
    echo ""
    echo "=== Review Threads ==="
    uv run {{scripts_dir}}/fetch_review_threads.py {{owner}} {{repo}} {{pr_number}}
    echo ""
    echo "=== Comments ==="
    uv run {{scripts_dir}}/fetch_pr_comments.py {{owner}} {{repo}} {{pr_number}}

# Ensure a GitHub label exists, create if missing
ensure-label label description="Valid feedback deferred from PR review" color="FEF2C0":
    #!/usr/bin/env bash
    if ! gh label list | grep -q "^{{label}}"; then
        gh label create "{{label}}" --description "{{description}}" --color "{{color}}"
        echo "Created label: {{label}}"
    else
        echo "Label exists: {{label}}"
    fi
