# shellcheck shell=dash
___x_cmd_advise_subcmd(){
    local op="$1"
    case "$op" in
        ls|has|list_with_desc) shift; ___x_cmd_advise_subcmd_"$op" "$@" ;;
        *) ;;
    esac
}

___x_cmd_advise_subcmd_ls(){
    local filepath=""
    while [ "$#" -gt 0 ]; do
        case "$1" in
            -m)
                x_=; ___x_cmd_advise___main __get_mod_advise_jso_ "$2" || N=advise M="Not found advise jso file for [module=$2]" log:ret:64
                filepath="$x_"; shift 2
                ;;
            -f) filepath="$2"; shift 2 ;;
            *)  break ;;
        esac
    done
    [ -f "$filepath" ] || N=advise M="Unexisted filepath for advise jso. [filepath=$filepath]." log:ret:64

    local argstr="$*"
    ___X_CMD_ADVISE_DEV_MOD="$___X_CMD_ADVISE_DEV_MOD" \
    ARGSTR="$argstr" \
    < "$filepath" ___x_cmd_cmds_awk \
    -v ___X_CMD_ROOT_ADV="$___X_CMD_ROOT_ADV" \
    -v ___X_CMD_ADVISE_MAN_XCMD_FOLDER="$___X_CMD_ADVISE_MAN_XCMD_FOLDER" \
    -v ___X_CMD_LANG="$___X_CMD_LANG" \
    -f "$___X_CMD_ROOT_MOD/awk/lib/core.awk"                \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/json.awk"              \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jiter.awk"             \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jop.awk"               \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jcp.awk"               \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/advise.obj.awk"   \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/advise.util.awk"  \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/advise.share.awk" \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/subcmd/ls.awk"
}

___x_cmd_advise_subcmd_list_with_desc(){
    local filepath=""
    local sep=""
    while [ "$#" -gt 0 ]; do
        case "$1" in
            -m)
                x_=; ___x_cmd_advise___main __get_mod_advise_jso_ "$2" || N=advise M="Not found advise jso file for [module=$2]" log:ret:64
                filepath="$x_"; shift 2
                ;;
            -f) filepath="$2"; shift 2 ;;
            --sep)
                sep="$2"; shift 2 ;;
            *)  break ;;
        esac
    done
    [ -f "$filepath" ] || N=advise M="Unexisted filepath for advise jso. [filepath=$filepath]." log:ret:64

    local argstr="$*"
    ___X_CMD_ADVISE_DEV_MOD="$___X_CMD_ADVISE_DEV_MOD" \
    ARGSTR="$argstr" \
    < "$filepath" ___x_cmd_cmds_awk \
    -v LIST_DESC_SEP="${sep:-":"}" \
    -v ___X_CMD_ROOT_ADV="$___X_CMD_ROOT_ADV" \
    -v ___X_CMD_ADVISE_MAN_XCMD_FOLDER="$___X_CMD_ADVISE_MAN_XCMD_FOLDER" \
    -v ___X_CMD_LANG="$___X_CMD_LANG" \
    -f "$___X_CMD_ROOT_MOD/awk/lib/core.awk"                \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/json.awk"              \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jiter.awk"             \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jop.awk"               \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jcp.awk"               \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/advise.obj.awk"   \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/advise.util.awk"  \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/advise.share.awk" \
    -f "$___X_CMD_ROOT_MOD/advise/lib/awk/subcmd/list_with_desc.awk"
}

___x_cmd_advise_subcmd_has(){
    local subcmd="$1"
    [ -n "$subcmd" ] || N=advise M="Please provide the subcmd value" log:ret:64
    shift
    local datalist; datalist="$( ___x_cmd_advise_subcmd_ls "$@" )" || return $?
    [ -n "$datalist" ] || return $?

    local nl="$___X_CMD_UNSEENCHAR_NEWLINE"
    datalist="${nl}${datalist}${nl}"
    [ "$datalist" = "${datalist#*"${nl}${subcmd}${nl}"}" ] || return 0
    return 1
}
