#!/bin/bash
# issue-list.sh - List issues on Gitea or GitHub
# Usage: issue-list.sh [-r owner/repo] [-s state] [-l label] [-m milestone] [-a assignee]

set -e

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

# Default values
STATE="open"
LABEL=""
MILESTONE=""
ASSIGNEE=""
LIMIT=100
REPO_OVERRIDE=""

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

List issues from the current repository (Gitea or GitHub).

Options:
    -s, --state STATE       Filter by state: open, closed, all (default: open)
    -l, --label LABEL       Filter by label
    -m, --milestone NAME    Filter by milestone name
    -a, --assignee USER     Filter by assignee
    -n, --limit N           Maximum issues to show (default: 100)
    -r, --repo OWNER/REPO   Repository slug (default: infer from git origin)
    -h, --help              Show this help message

Examples:
    $(basename "$0")                          # List open issues
    $(basename "$0") -s all -l bug            # All issues with 'bug' label
    $(basename "$0") -m "0.2.0"               # Issues in milestone 0.2.0
    $(basename "$0") --repo ddk/ai-bma         # List issues from anywhere
EOF
    exit "${1:-1}"
}

# Parse arguments
while [[ $# -gt 0 ]]; do
    case $1 in
        -s|--state)
            STATE="$2"
            shift 2
            ;;
        -l|--label)
            LABEL="$2"
            shift 2
            ;;
        -m|--milestone)
            MILESTONE="$2"
            shift 2
            ;;
        -a|--assignee)
            ASSIGNEE="$2"
            shift 2
            ;;
        -n|--limit)
            LIMIT="$2"
            shift 2
            ;;
        -r|--repo)
            REPO_OVERRIDE="$2"
            shift 2
            ;;
        -h|--help)
            usage 0
            ;;
        *)
            echo "Unknown option: $1" >&2
            usage
            ;;
    esac
done

if [[ -n "$REPO_OVERRIDE" ]]; then
    REPO_INFO="$REPO_OVERRIDE"
    PLATFORM=$(detect_platform 2>/dev/null || echo gitea)
else
    PLATFORM=$(detect_platform)
    REPO_INFO=$(get_repo_info)
fi

if [[ -z "$REPO_INFO" || "$REPO_INFO" == error:* ]]; then
    echo "Error: Could not determine repository from git origin. Run from a repo or pass --repo." >&2
    exit 1
fi

case "$PLATFORM" in
    github)
        CMD=(gh issue list --repo "$REPO_INFO" --state "$STATE" --limit "$LIMIT")
        [[ -n "$LABEL" ]] && CMD+=(--label "$LABEL")
        [[ -n "$MILESTONE" ]] && CMD+=(--milestone "$MILESTONE")
        [[ -n "$ASSIGNEE" ]] && CMD+=(--assignee "$ASSIGNEE")
        "${CMD[@]}"
        ;;
    gitea)
        if [[ -n "$REPO_OVERRIDE" ]]; then
            GITEA_LOGIN_NAME=$(get_gitea_login_for_repo_override) || {
                echo "Error: Could not resolve Gitea login for --repo override. Set GITEA_LOGIN or configure a default tea login." >&2
                exit 1
            }
        else
            GITEA_LOGIN_NAME=$(get_gitea_login) || {
                echo "Error: Could not resolve Gitea login for remote host" >&2
                exit 1
            }
        fi
        CMD=(tea issues list --repo "$REPO_INFO" --login "$GITEA_LOGIN_NAME" --state "$STATE" --limit "$LIMIT")
        [[ -n "$LABEL" ]] && CMD+=(--labels "$LABEL")
        [[ -n "$MILESTONE" ]] && CMD+=(--milestones "$MILESTONE")
        # Note: tea may not support assignee filter directly in all versions.
        [[ -n "$ASSIGNEE" ]] && echo "Note: Assignee filtering may require manual review for Gitea" >&2
        "${CMD[@]}"
        ;;
    *)
        echo "Error: Could not detect git platform" >&2
        exit 1
        ;;
esac
