# shellcheck shell=dash

___x_cmd_pkg_which(){
    local name="$1";    [ -n "$name" ] || N=pkg M="Provide a package name" log:ret:1

    local x_=;
    if ___x_cmd_pkg_which_ "$name"; then
        printf "%s\n" "$x_"
        return
    elif ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_chatty; then
        pkg:info "Not found binary => $name"
        local id
        # Next, search the package name
        ___x_cmd ui select id "Next"               \
            "x pkg info $name"              \
            "Install Software: x env"       \
            "Install Software: x install"   \
            "Quit"

        case "$id" in
            1)      ___x_cmd pkg info "$name"  ;;
            2)      ___x_cmd env               ;;
            3)      ___x_cmd install           ;;
            *)      return
        esac
    else
        # pkg:error "Not found binary => $name"
        return 1
    fi
}


___x_cmd_pkg_which_(){
    local name="$1"
    x_="$( command -v "$name" 2>/dev/null )"
    [ -z "$x_" ] || return 0    # Already loaded in this shell env

    local p=
    ___x_cmd_pkg_which___bin | while ___x_cmd_readr p; do
        ___x_cmd_whichbin___check_ "$p" "$name" || continue
        return 0
    done
    return 1
}

___x_cmd_pkg_which___bin()(
    local p=; local i=
    for p in "$___X_CMD_PKG_ROOT_SPHERE/"*/tree.*/*/*; do
        i=; for i in bin shim_bin adaptive_shim_bin; do
            ! [ -d "$p/$i" ] || printf "%s\n" "$p/$i"
        done
    done 2>/dev/null
)
