# shellcheck    shell=sh disable=SC3043
# Section 3: param type definition

___x_cmd_param_type(){
    case "$1" in
        unset)      shift; param_type_unset "$@" ;;
        pprint)     shift; param_type_pprint "$@" ;;

        *)          param_type "$@"
    esac
}

# Example:
# param_type    gitee     repo
# param_type    gitee     user      =~  [A-Za-z0-9_]+
# param_type    gitee     access    =   private         public          inner-public
# param_type    gitee     License   -  <"$(xrc cat gh/lib/_type/license)"


PARAM_TYPE_VAR_PREFIX=___X_CMD_X_BASH_PARAM_TYPE___

param_type(){
    local IFS=" "
    local app_name="$1"
    [ -n "$1" ] || M="Please provide mod name" N="param" log:ret:64;
    shift

    local result
    if [ "$2" != - ]; then
        result="$*"
    else
        result="$1 = $(___x_cmd_cmds_cat | ___x_cmd_cmds_awk '{ str=$0 ; gsub("\"", "\\\"", str) ; printf(" \"%s\"", str) }')"
    fi

    local varname="${PARAM_TYPE_VAR_PREFIX}${app_name}"
    eval "$varname=\"\${$varname}\${___X_CMD_PARAM_ARG_SEP}\${result}\""
}

param_type_unset(){
    local app_name="$1"
    [ -n "$1" ] || M="Please provide mod name" N="param" log:ret:64;
    local varname="${PARAM_TYPE_VAR_PREFIX}${app_name}"
    eval "$varname="
}

param_type_pprint(){
    ___x_cmd_param___type_print "$@" | tr "$___X_CMD_PARAM_ARG_SEP" "\n"
}


