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

# shellcheck disable=2120
___x_cmd_fjo_current(){
    param:void
    local _op="$1"; [ -z "$1" ] || shift;
    case "${_op}" in
        profile)
            if [ -z "$1" ]; then
                [ -n "$___X_CMD_FJO_CURRENT_profile" ] || return 1
                printf "%s\n" "$___X_CMD_FJO_CURRENT_profile"
            else
                ___X_CMD_FJO_CURRENT_profile="$1"
                printf "%s=%s\n" "profile" "$___X_CMD_FJO_CURRENT_profile"
            fi ;;

        config)
            if [ -z "$1" ]; then
                [ -n "$___X_CMD_FJO_CURRENT_config" ] || return 1
                printf "%s\n" "$___X_CMD_FJO_CURRENT_config"
            else
                ___X_CMD_FJO_CURRENT_config="$1"
                printf "%s=%s\n" "config" "$___X_CMD_FJO_CURRENT_config"
            fi ;;

        repo)
            if [ -z "$1" ]; then
                [ -n "$___X_CMD_FJO_CURRENT_repo" ] || return 1
                printf "%s\n" "$___X_CMD_FJO_CURRENT_repo"
            else
                ___X_CMD_FJO_CURRENT_repo="$1"
                printf "%s=%s\n" "repo" "$___X_CMD_FJO_CURRENT_repo"
            fi ;;

        owner)
            if [ -z "$1" ]; then
                [ -n "$___X_CMD_FJO_CURRENT_owner" ] || return 1
                printf "%s\n" "$___X_CMD_FJO_CURRENT_owner"
            else
                ___X_CMD_FJO_CURRENT_owner="$1"
                printf "%s=%s\n" "owner" "$___X_CMD_FJO_CURRENT_owner"
            fi ;;
        unset)
            ___x_cmd_fjo_current_unset "$@" ;;
        -h|--help)
            _____x_cmd_fjo_help current  ;;
        *)
            printf "%s=%s\n" "profile" "$___X_CMD_FJO_CURRENT_profile" "config" "$___X_CMD_FJO_CURRENT_config" "repo" "$___X_CMD_FJO_CURRENT_repo" "owner" "$___X_CMD_FJO_CURRENT_owner" ;;
    esac
}

___x_cmd_fjo_current_unset(){
    param:void
    case "${1}" in
        all)
            unset   ___X_CMD_FJO_CURRENT_profile     ___X_CMD_FJO_CURRENT_config \
                    ___X_CMD_FJO_CURRENT_repo        ___X_CMD_FJO_CURRENT_owner
            ;;
        profile|config|repo|owner)      unset "___X_CMD_FJO_CURRENT_${2}"  ;;
        *)                              _____x_cmd_fjo_help current unset ;;
    esac
}

# NOTE: need unset json ENFORCE_JSON. the util func only using on subshell
___x_cmd_fjo_owner_type_query() {
    param:void
    local owner="$1";   arg:init tea;
    [ -n "$owner" ]  || M='Please privide owner name' arg:ret:64
    [ "${owner##*/}" = "${owner}" ] || { printf "%s" "repo"; return 0; }
    unset json ENFORCE_JSON
    local types=""
    for types in "org" "user"
    do
        if  ___x_cmd_fjo_${types}_info "$owner" 1>/dev/null 2>&1;then
            printf "%s" "$types"
            return
        fi
    done
    return 1
}
