#!/bin/bash
# pr-create.sh - Create pull requests on Gitea or GitHub
# Usage: pr-create.sh -t "Title" [-b "Body"] [-B base] [-H head] [-l "labels"] [-m "milestone"]

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/detect-platform.sh"

# Default values
TITLE=""
BODY=""
BASE_BRANCH=""
HEAD_BRANCH=""
LABELS=""
MILESTONE=""
DRAFT=false
ISSUE=""

usage() {
    cat <<EOF
Usage: $(basename "$0") [OPTIONS]

Create a pull request on the current repository (Gitea or GitHub).

Options:
    -t, --title TITLE       PR title (required, or use --issue)
    -b, --body BODY         PR description/body
    -B, --base BRANCH       Base branch to merge into (default: main/master)
    -H, --head BRANCH       Head branch with changes (default: current branch)
    -l, --labels LABELS     Comma-separated labels
    -m, --milestone NAME    Milestone name
    -i, --issue NUMBER      Link to issue (auto-generates title if not provided)
    -d, --draft             Create as draft PR
    -h, --help              Show this help message

Examples:
    $(basename "$0") -t "Add login feature" -b "Implements user authentication"
    $(basename "$0") -t "Fix bug" -B main -H feature/fix-123
    $(basename "$0") -i 42 -b "Implements the feature described in #42"
    $(basename "$0") -t "WIP: New feature" --draft
EOF
    exit 1
}

# Parse arguments
while [[ $# -gt 0 ]]; do
    case $1 in
        -t|--title)
            TITLE="$2"
            shift 2
            ;;
        -b|--body)
            BODY="$2"
            shift 2
            ;;
        -B|--base)
            BASE_BRANCH="$2"
            shift 2
            ;;
        -H|--head)
            HEAD_BRANCH="$2"
            shift 2
            ;;
        -l|--labels)
            LABELS="$2"
            shift 2
            ;;
        -m|--milestone)
            MILESTONE="$2"
            shift 2
            ;;
        -i|--issue)
            ISSUE="$2"
            shift 2
            ;;
        -d|--draft)
            DRAFT=true
            shift
            ;;
        -h|--help)
            usage
            ;;
        *)
            echo "Unknown option: $1" >&2
            usage
            ;;
    esac
done

# If no title but issue provided, generate title
if [[ -z "$TITLE" ]] && [[ -n "$ISSUE" ]]; then
    TITLE="Fixes #$ISSUE"
fi

if [[ -z "$TITLE" ]]; then
    echo "Error: Title is required (-t) or provide an issue (-i)" >&2
    usage
fi

# Default head branch to current branch
if [[ -z "$HEAD_BRANCH" ]]; then
    HEAD_BRANCH=$(git branch --show-current)
fi

# Add issue reference to body if provided
if [[ -n "$ISSUE" ]]; then
    if [[ -n "$BODY" ]]; then
        BODY="$BODY

Fixes #$ISSUE"
    else
        BODY="Fixes #$ISSUE"
    fi
fi

PLATFORM=$(detect_platform)

case "$PLATFORM" in
    github)
        CMD="gh pr create --title \"$TITLE\""
        [[ -n "$BODY" ]] && CMD="$CMD --body \"$BODY\""
        [[ -n "$BASE_BRANCH" ]] && CMD="$CMD --base \"$BASE_BRANCH\""
        [[ -n "$HEAD_BRANCH" ]] && CMD="$CMD --head \"$HEAD_BRANCH\""
        [[ -n "$LABELS" ]] && CMD="$CMD --label \"$LABELS\""
        [[ -n "$MILESTONE" ]] && CMD="$CMD --milestone \"$MILESTONE\""
        [[ "$DRAFT" == true ]] && CMD="$CMD --draft"
        eval "$CMD"
        ;;
    gitea)
        # tea pull create syntax
        CMD="tea pr create --title \"$TITLE\""
        [[ -n "$BODY" ]] && CMD="$CMD --description \"$BODY\""
        [[ -n "$BASE_BRANCH" ]] && CMD="$CMD --base \"$BASE_BRANCH\""
        [[ -n "$HEAD_BRANCH" ]] && CMD="$CMD --head \"$HEAD_BRANCH\""

        # Handle labels for tea
        if [[ -n "$LABELS" ]]; then
            # tea may use --labels flag
            CMD="$CMD --labels \"$LABELS\""
        fi

        # Handle milestone for tea
        if [[ -n "$MILESTONE" ]]; then
            MILESTONE_ID=$(tea milestones list 2>/dev/null | grep -E "^\s*[0-9]+" | grep "$MILESTONE" | awk '{print $1}' | head -1)
            if [[ -n "$MILESTONE_ID" ]]; then
                CMD="$CMD --milestone $MILESTONE_ID"
            else
                echo "Warning: Could not find milestone '$MILESTONE', creating without milestone" >&2
            fi
        fi

        # Note: tea may not support --draft flag in all versions
        if [[ "$DRAFT" == true ]]; then
            echo "Note: Draft PR may not be supported by your tea version" >&2
        fi

        eval "$CMD"
        ;;
    *)
        echo "Error: Could not detect git platform" >&2
        exit 1
        ;;
esac
