# shellcheck shell=dash disable=SC2034,SC2154
# shellcheck disable=SC2039,3043

xrc:mod:lib fjo     repo/release/attachment/_index \
                    repo/release/ls                \
                    repo/release/rm                \
                    repo/release/edit              \
                    repo/release/info              \
                    repo/release/latest            \
                    repo/release/create

___x_cmd_fjo_repo_release(){
    param:subcmd ___x_cmd_fjo_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_fjo_repo_release _param_help_doc
    return 1
}

# https://gitea.com/api/swagger#/repository/repoGetReleaseByTag
___x_cmd_fjo_repo_get_release_by_tag() {
    param:scope     ___x_cmd_fjo
    param:dsl    '
options:
    #1              "tag name"                                      <>
    --repo|-r       "<owner_path>/<repo_path>"                      <>:RepoName

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

    ___x_cmd_fjo_curl get "/repos/${owner_repo}/releases/tags/${1}"
}


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

alias ___x_cmd_fjo_repo_release_init_owner_repo_and_release="
    ___x_cmd_fjo_repo_release_init_owner_repo_and_release_main || return
"


# Section: release utils
___x_cmd_fjo_release____ui_handler(){
    if [ -n "$ENFORCE_JSON" ] || [ -n "$json" ]; then
        ___x_cmd_cmds_cat
        ___x_cmd_fjo_http_error
        return
    fi
    (
        local data
        local msg
        local error_msg
        case "$1" in
            Creating|Edit)
                msg="$1 repo release success."
                error_msg="$1 repo release Fail."
                ;;
            Latest)
                msg="Successfully obtained the latest release information of the repo"
                error_msg="Failed to get the latest release information of repo"
                ;;
            Info)
                msg="Successfully get repo release info."
                error_msg="Get repo release info failure."
                ;;
        esac
        ___x_cmd jo env . id=.id name=.name tag_name=.tag_name    \
            branch=.target_commitish html_url=.html_url         \
            author=.author.login fjo_resp_err=.message
        if [ -n "$id" ]; then
            ___x_cmd_ui_tf true "$msg" "Id: $id" ${name+"Name: $name"} ${tag_name+"TagName: $tag_name"}  ${branch+"TargetCommitish: $branch"} ${author+"Author: $author"} ${html_url+"Url: $html_url"}
        else
            ___x_cmd_ui_tf false "$error_msg"
            ___x_cmd_fjo____handle_resp
            return 1
        fi
    )
}

