# shellcheck shell=sh
# shellcheck disable=SC2039,3043
# define lazy loader
# ___x_cmd_definelazyloader   ___x_cmd_gt_enterprise_member        gt/lib/enterprise/member

___x_cmd_gt_enterprise(){
    param:scope     ___x_cmd_gt
    param:subcmd ___x_cmd_gt_enterprise                     \
        ls              "List all enterprise"               \
        info            "Show enterprise information"       \
        issue           "enterprise issue  management"      \
        repo            "enterprise repo   management"      \
        member          "enterprise member management"
    param:subcmd:try
    param:run

    ___x_cmd_gt_enterprise _param_help_doc
    return 1
}

# Section: list & info

# shellcheck disable=SC2154
# https://gitee.com/api/v5/swagger#/getV5UserEnterprises
___x_cmd_gt_enterprise_ls(){
    param:scope     ___x_cmd_gt
    param:dsl       '
options:
    --page       "page"                                                 <>="1"
    --per_page   "per_page"                                             <>="30"
    --admin      "list only authorized users managed enterprise"
    --json|-j    "output origin json data"
'
    param:run
    if [ -n "$json" ] || [ -n "$ENFORCE_JSON" ]; then
        ___x_cmd_gt_get_multi "/user/enterprises" admin
    else
        ___x_cmd_gt_get_multi "/user/enterprises" admin | \
            x jo 2c             .id .name .path | \
            x csv header --add   Id  Name  Path | \
            x csv static_tab
    fi
}

# shellcheck disable=SC2154
# https://gitee.com/api/v5/swagger#/getV5EnterprisesEnterprise
___x_cmd_gt_enterprise_info(){
    param:scope     ___x_cmd_gt
    param:dsl       '

options:
    #1             "Please provide enterprise path"    <>
    --json|-j      "output origin json data"
'
    param:run
    [ -n "$1" ] || M='accepts 1 arg(enterprise path), received empty' arg:ret:64
    ___x_cmd_gt_curl get "/enterprises/$1" | ___x_cmd_gt_enterprise____ui_handler Info "$1"
}
# EndSection

# Section: enterprise UI
___x_cmd_gt_enterprise____ui_handler(){
    if [ -n "$ENFORCE_JSON" ] || [ -n "$json" ]; then
        ___x_cmd_cmds_cat
        ___x_cmd_gt_http_error
        return
    fi
    (
        case "$1" in
            Info)
                _inf_msg="$2 enterprise information"
                _err_msg="No find any enterprise info data by $2"
            ;;
        esac
        local _id=""
        x jo env . _id=.id gt_resp_err=.message gt_resp_err=.error \
            _name=.name ___path=.path
        if [ -n "$_id" ]; then
            ___x_cmd_ui_tf  true "${_inf_msg}:" ${_name:+"Name: $_name"} ${___path:+"Path: $___path"}
        else
            ___x_cmd_ui_tf false "${_err_msg}:" >&2
            ___x_cmd_gt____handle_resp
            return 1
        fi
    )
}

# EndSection

___x_cmd_gt_enterprise_repo(){
    param:subcmd ___x_cmd_gt_enterprise_repo                \
        ls       "Interactive UI show enterprise repo"      \
        ll          "List enterprise repo"                  \
        create      "Create enterprise repo"
    param:subcmd:try
    param:run

    ___x_cmd_gt_enterprise_repo_ls
}

# Section: Repo List
# https://gitee.com/api/v5/swagger#/getV5EnterprisesEnterpriseRepos
___x_cmd_gt_enterprise_repo_ll(){
    param:scope     ___x_cmd_gt
    param:dsl       '
type:
    Genre = all public internal private
options:
    #1              "Please provide enterprise path"    <>
    --type          "repo type"                         <>:Genre="all"
    --page          "page"                              <>="1"
    --per_page      "per_page"                          <>="30"
    --direct        "only get direct repo"

    --json|-j       "output origin json data"
    --csv           "output csv data"
    --yml           "output yml data"
'
    param:run
    [ -n "$1" ] || M='accepts 1 arg(enterprise path), received empty' arg:ret:64
    [ -n "$direct" ] || direct=false
    if ___x_cmd_gx_output_is_format; then
        ___x_cmd_gt_get_multi "/enterprises/$1/repos" type direct | ___x_cmd_gx_output_format
    else
        ___x_cmd_gt_get_multi "/enterprises/$1/repos" type direct | \
            x jo 2c             .full_name .private   .html_url | \
            x csv header --add   RepoPath   IsPrivate  Url      | \
            if [ -n "$csv" ]; then  ___x_cmd_cmds cat
            else                    x csv static_tab
            fi
    fi
}
# EndSection

# Section: Repo List
# https://gitee.com/api/v5/swagger#/getV5EnterprisesEnterpriseRepos
# shellcheck disable=SC2120
___x_cmd_gt_enterprise_repo_ls(){
    if ___x_cmd_gx_has_format_args "$@"; then
        ___x_cmd_gt_enterprise_repo_ll "$@"
        return
    fi

    param:scope     ___x_cmd_gt
    param:dsl       '
type:
    Genre = all public internal private
options:
    #1              "Please provide enterprise path"    <>
    --repo_type     "type"                              <>:Genre="all"
    --page          "page"                              <>="1"
    --per_page      "per_page"                          <>="20"
    --direct        "only get direct repo"
'
    param:run


    [ -n "$1" ] || M='accepts 1 arg(enterprise path), received empty' arg:ret:64
    local enterprise="$1"

    if ___x_cmd_gx_is_interactive_env; then
        local ___X_CMD_TUI_TABLE_FINAL_COMMAND
        local ___X_CMD_TUI_TABLE_CUR_LINE
        local ___X_CMD_TUI_TABLE_CUR_ITEM
        [ -n "$direct" ] || direct=false

        ___x_cmd_gt_tui_app --repo_type "$repo_type" --direct "$direct" --page "$page" --per_page "$per_page" --enterprise "$enterprise" \
            --request-code '___x_cmd_gt_get_multi___get_data /enterprises/${enterprise}/repos repo_type direct page per_page' \
            --error-msg "Couldn't find any data by $enterprise" \
            "enterprise_repo_app.awk"
    else
        ___x_cmd_gt_get_multi "/enterprises/${enterprise}/repos" type direct  page per_page | \
            x jo 2c    .full_name
    fi
}
# EndSection
