#!/bin/bash
# issue-close.sh - Close an issue on GitHub or Gitea
# Usage: issue-close.sh -i <issue_number> [-c <comment>]

set -e

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

# Parse arguments
ISSUE_NUMBER=""
COMMENT=""

while [[ $# -gt 0 ]]; do
    case $1 in
        -i|--issue)
            ISSUE_NUMBER="$2"
            shift 2
            ;;
        -c|--comment)
            COMMENT="$2"
            shift 2
            ;;
        -h|--help)
            echo "Usage: issue-close.sh -i <issue_number> [-c <comment>]"
            echo ""
            echo "Options:"
            echo "  -i, --issue    Issue number (required)"
            echo "  -c, --comment  Comment to add before closing (optional)"
            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 and close issue
detect_platform >/dev/null
OWNER=$(get_repo_owner)
REPO=$(get_repo_name)

gitea_issue_comment_api() {
    local host token url payload
    host=$(get_remote_host) || return 1
    token=$(get_gitea_token "$host") || return 1
    url="https://${host}/api/v1/repos/${OWNER}/${REPO}/issues/${ISSUE_NUMBER}/comments"
    payload=$(COMMENT="$COMMENT" python3 - <<'PY'
import json
import os

print(json.dumps({"body": os.environ["COMMENT"]}))
PY
)
    curl -fsS -X POST \
        -H "User-Agent: curl/8" \
        -H "Authorization: token ${token}" \
        -H "Content-Type: application/json" \
        -d "$payload" \
        "$url" >/dev/null
}

gitea_issue_close_api() {
    local host token url
    host=$(get_remote_host) || return 1
    token=$(get_gitea_token "$host") || return 1
    url="https://${host}/api/v1/repos/${OWNER}/${REPO}/issues/${ISSUE_NUMBER}"
    curl -fsS -X PATCH \
        -H "User-Agent: curl/8" \
        -H "Authorization: token ${token}" \
        -H "Content-Type: application/json" \
        -d '{"state":"closed"}' \
        "$url" >/dev/null
}

if [[ "$PLATFORM" == "github" ]]; then
    if [[ -n "$COMMENT" ]]; then
        gh issue comment "$ISSUE_NUMBER" --body "$COMMENT"
    fi
    gh issue close "$ISSUE_NUMBER"
    echo "Closed GitHub issue #$ISSUE_NUMBER"
elif [[ "$PLATFORM" == "gitea" ]]; then
    GITEA_LOGIN_NAME=$(get_gitea_login || true)
    if [[ -n "$GITEA_LOGIN_NAME" ]]; then
        if [[ -n "$COMMENT" ]]; then
            tea issue comment "$ISSUE_NUMBER" "$COMMENT" --repo "$OWNER/$REPO" --login "$GITEA_LOGIN_NAME"
        fi
        tea issue close "$ISSUE_NUMBER" --repo "$OWNER/$REPO" --login "$GITEA_LOGIN_NAME"
    else
        echo "No tea login configured for $(get_remote_host); using authenticated Gitea API fallback." >&2
        if [[ -n "$COMMENT" ]]; then
            gitea_issue_comment_api
        fi
        gitea_issue_close_api
    fi
    echo "Closed Gitea issue #$ISSUE_NUMBER"
else
    echo "Error: Unknown platform"
    exit 1
fi
