#!/bin/bash
# issue-edit.sh - Edit an issue on GitHub or Gitea
# Usage: issue-edit.sh -i <issue_number> [-t <title>] [-b <body>] [-l <labels>] [-m <milestone>]

set -e

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

# Parse arguments
ISSUE_NUMBER=""
TITLE=""
BODY=""
LABELS=""
MILESTONE=""

while [[ $# -gt 0 ]]; do
    case $1 in
        -i|--issue)
            ISSUE_NUMBER="$2"
            shift 2
            ;;
        -t|--title)
            TITLE="$2"
            shift 2
            ;;
        -b|--body)
            BODY="$2"
            shift 2
            ;;
        -l|--labels)
            LABELS="$2"
            shift 2
            ;;
        -m|--milestone)
            MILESTONE="$2"
            shift 2
            ;;
        -h|--help)
            echo "Usage: issue-edit.sh -i <issue_number> [-t <title>] [-b <body>] [-l <labels>] [-m <milestone>]"
            echo ""
            echo "Options:"
            echo "  -i, --issue      Issue number (required)"
            echo "  -t, --title      New title"
            echo "  -b, --body       New body/description"
            echo "  -l, --labels     Labels (comma-separated, replaces existing)"
            echo "  -m, --milestone  Milestone name"
            echo "  -h, --help       Show this help"
            exit 0
            ;;
        *)
            echo "Unknown option: $1"
            exit 1
            ;;
    esac
done

if [[ -z "$ISSUE_NUMBER" ]]; then
    echo "Error: Issue number is required (-i)"
    exit 1
fi

detect_platform >/dev/null

if [[ "$PLATFORM" == "github" ]]; then
    CMD=(gh issue edit "$ISSUE_NUMBER")
    [[ -n "$TITLE" ]] && CMD+=(--title "$TITLE")
    [[ -n "$BODY" ]] && CMD+=(--body "$BODY")
    [[ -n "$LABELS" ]] && CMD+=(--add-label "$LABELS")
    [[ -n "$MILESTONE" ]] && CMD+=(--milestone "$MILESTONE")
    "${CMD[@]}"
    echo "Updated GitHub issue #$ISSUE_NUMBER"
elif [[ "$PLATFORM" == "gitea" ]]; then
    REPO_SLUG=$(get_repo_slug) || {
        echo "Error: Could not resolve Gitea repo slug from remote" >&2
        exit 1
    }
    REPO_LOGIN=$(get_gitea_login) || {
        echo "Error: Could not resolve Gitea login for remote host" >&2
        exit 1
    }
    CMD=(tea issue edit "$ISSUE_NUMBER" --repo "$REPO_SLUG" --login "$REPO_LOGIN")
    [[ -n "$TITLE" ]] && CMD+=(--title "$TITLE")
    [[ -n "$BODY" ]] && CMD+=(--description "$BODY")
    [[ -n "$LABELS" ]] && CMD+=(--add-labels "$LABELS")
    [[ -n "$MILESTONE" ]] && CMD+=(--milestone "$MILESTONE")
    "${CMD[@]}"
    echo "Updated Gitea issue #$ISSUE_NUMBER"
else
    echo "Error: Unknown platform"
    exit 1
fi
