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

# define lazy loader
# ___x_cmd_definelazyloader   ___x_cmd_gt_repo_ls             gt/lib/repo/main

___x_cmd_gt_user(){
    param:scope     ___x_cmd_gt
    param:subcmd ___x_cmd_gt_user                   \
        info        "Show information"              \
        email       "Show user email"               \
        issue       "List all user issues"          \
        ssh         "user ssh management"           \
        repo        "user repo management"
    param:subcmd:try
    param:run

    ___x_cmd_gt_user _param_help_doc
    return 1
}

# Section: Info
# shellcheck disable=SC2154
# https://gitee.com/api/v5/swagger#/getV5UsersUsername
___x_cmd_gt_user_info(){
    param:scope     ___x_cmd_gt
    param:dsl       '
options:
    #1              "Provide user name.(default:the current user)"
    --json|-j       "output origin json data"
'
    param:run

    local _avt_name="$1"
    if [ -z "$_avt_name" ]; then
        url="/user"
    else
        ___x_cmd_gt____transform_avt_name || return
        url="/users/$_avt_name"
    fi

    ___x_cmd_gt_curl get "$url" | ___x_cmd_gt_user_info____ui_handler
}

# shellcheck disable=SC2154
___x_cmd_gt_user_info____ui_handler(){
    if [ -n "$json" ] || [ -n "$ENFORCE_JSON" ]; then
        ___x_cmd_cmds_cat
        ___x_cmd_gt_http_error
        return
    fi
    (
        local _name=""
        x jo env . _name=.login email=.email html_url=.html_url types=.type gt_resp_err=.message gt_resp_err=.error
        if [ -n "$_name" ]; then
            ___x_cmd_ui_tf true    "Get${_avt_name:+" $_avt_name"} user info successfully:" "Name: $_name" "Email: $email" "URL: $html_url" "Type: $types"
        else
            ___x_cmd_ui_tf false   "Get${_avt_name:+" $_avt_name"} user info failure:" >&2
            ___x_cmd_gt____handle_resp
            return 1
        fi
    )
}
# EndSection

# Section: Email
# https://gitee.com/api/v5/swagger#/getV5Emails
___x_cmd_gt_user_email(){
    param:scope     ___x_cmd_gt
    param:dsl       '
options:
    --page          "page"                        <>="1"
    --per_page      "per_page"                    <>="30"
    --json|-j       "output origin json data"
'
    param:run
    if [ -n "$json" ] || [ -n "$ENFORCE_JSON" ]; then
        ___x_cmd_gt_get_multi "/emails"
    else
        ___x_cmd_gt_get_multi "/emails" | \
            x jo 2c             .email .state .scope | \
            x csv header --add   Email  State  Scope | \
            x csv static_tab
    fi
}

# EndSection
