# shellcheck shell=dash

___x_cmd log init hok
xrc scoop
xrc:mod:lib hok     install list search qsearch la

___x_cmd_hok___main(){
    local X_help_cmd=; X_help_cmd='___x_cmd help -m hok' help:arg:parse
    ___x_cmd_hok___env_available || N=hok M='hok is only available on Windows' log:ret:1

    [ "$#" -gt 0 ] || set -- la
    local op="$1";  shift
    case "$op" in
        # config)             ___x_cmd_hok_config         "$@"    ;;
        # install)            ___x_cmd_hok_install        "$@"    ;;

        # ls)                 ___x_cmd_hok_ls             "$@"    ;;
        # la)                 ___x_cmd_hok_la             "$@"    ;;
        # :|ddgo)             ___x_cmd_hok_ddgo           "$@"    ;;
        # ::|ddgoai)          ___x_cmd_hok_ddgoai         "$@"    ;;

        --fzfinfo)          ___x_cmd_hok___fzfinfo      "$@"    ;;

        la)                 ___x_cmd_hok_la             "$@"    ;;
        qs)                 ___x_cmd_hok_qsearch        "$@"    ;;
        search)             ___x_cmd_hok_search         "$@"    ;;
        list|ls)            ___x_cmd_hok_list           "$@"    ;;

        # official command
        bucket|cache|cat|cleanup|\
            config|hold|home|info|install|\
            unhold|uninstall|update|upgrade|help)
                            ___x_cmd_hok___bin "$op"    "$@"    ;;
        *)       N=hok M="Unsupported subcmd => $op" log:ret:64  ;;
    esac
}

___x_cmd_hok___bin(){
    if ___x_cmd hascmd hok; then
        ___x_cmd_hok___bin(){
            ___x_cmd_cmds hok "$@"
        }
    elif ___x_cmd hascmd hok.exe; then
        ___x_cmd_hok___bin(){
            ___x_cmd_cmds hok.exe "$@"
        }
    else
        ___x_cmd_hok___prepare || {
            hok:error "command not found -> hok"
            return 1
        }

        ___x_cmd_hok___bin(){
            ___x_cmd_cmds hok.exe "$@"
        }
    fi

    ___x_cmd_hok___bin "$@"
}

___X_CMD_HOK_IS_AVAILABLE=
___x_cmd_hok___env_available(){
    if [ -z "$___X_CMD_HOK_IS_AVAILABLE" ]; then
        if ___x_cmd os is win || ___x_cmd os is wsl; then
            ___X_CMD_HOK_IS_AVAILABLE=0
        else
            ___X_CMD_HOK_IS_AVAILABLE=1
        fi
    fi
    return "$___X_CMD_HOK_IS_AVAILABLE"
}
