# shellcheck shell=sh
# shellcheck disable=SC2039,3043,SC2139,2154

xrc:mod:lib gh     repo/release/attachment/index   \
                    repo/release/ls                \
                    repo/release/rm                \
                    repo/release/edit              \
                    repo/release/info              \
                    repo/release/latest            \
                    repo/release/create

___x_cmd_gh_repo_release(){
    param:scope  ___x_cmd_github
    param:subcmd ___x_cmd_gh_repo_release                       \
        ls                  "List repo release"                 \
        info                "Show detailed information of repo" \
        latest              "Get latest release"                \
        create              "Create repo release"               \
        "edit|ed"           "Update release information"        \
        rm                  "Remove repo release"               \
        "attachment|asset"  "release attachment management"
    param:subcmd:try
    param:run

    ___x_cmd_gh_repo_release _param_help_doc
    return 1
}

# Section: release UI
___x_cmd_gh_release____ui_handler(){
    if [ -n "$ENFORCE_JSON" ] || [ -n "$json" ]; then
        ___x_cmd_cmds_cat
        ___x_cmd_gh_http_error
        return
    fi
    (
        case "$1" in
            Creating|Edit)
                _inf_msg="$1 repo release successfully"
                _err_msg="$1 repo release failure"
                ;;
            Latest)
                _inf_msg="Successfully obtained the latest release information of the repo"
                _err_msg="Failed to get the latest release information of repo"
                ;;
            Info)
                _inf_msg="Get repo release info successfully"
                _err_msg="Get repo release info failure"
                ;;
        esac
        x jo env . id=.id name=.name tag_name=.tag_name branch=.target_commitish html_url=.html_url author=.author.login \
            gh_resp_msg=.message gh_resp_err=.errors
        if [ -n "$id" ]; then
            ___x_cmd_ui_tf  true "${_inf_msg}:" "Release_Id: $id" ${name:+"Name: $name"} ${tag_name+"Tag: $tag_name"}  ${branch:+"TargetCommitish: $branch"} ${author:+"Author: $author"} ${html_url:+"Url: $html_url"}
        else
            ___x_cmd_ui_tf false "${_err_msg}:" >&2
            ___x_cmd_gh____handle_resp
            return 1
        fi
    )
}
# EndSection

# Section: TODO
___x_cmd_gh_repo_get_release_by_tag() {
    param:scope     ___x_cmd_github
    param:dsl    '
options:
    #1              "tag name"                          <>
    --repo|-r       "<owner_path>/<repo_path>"          <>:RepoName

    --json|-j       "output json data"
'
    param:run
    ___x_cmd_gh_param_init_owner_repo

    ___x_cmd_gh_curl get "/repos/${owner_repo}/releases/tags/${1##*/}"
}
# EndSection

# Assume pr and owner_repo are environments
# ___x_cmd_gh_repo_release_init_owner_repo_and_release_main(){
#     local release_id="${release##*/}"
#     owner_repo="${release%"$release_id"}"
#     ___x_cmd_gh_param_normalize_repo "$owner_repo"
#     release="$release_id"
# }

# alias ___x_cmd_gh_repo_release_init_owner_repo_and_release="
#     [ -n $release ]     || local release
#     [ -n $owner_repo ]  || local owner_repo
#     ___x_cmd_gh_repo_release_init_owner_repo_and_release_main || return
# "
