# shellcheck shell=sh disable=SC2039,SC1090,SC3043,SC2263    # xrc

___x_cmd_env_ls(){
    local X_help_cmd='___x_cmd help -m env ls'
    help:arg:parse

    [ $# -gt 0 ]    || set - --use
    local op="$1";  shift
    case "$op" in
        -a|--all)                   ___x_cmd_env_ls_all          "$@" ;;
        -u|--use)                   ___x_cmd_env_ls___pickapp ___x_cmd_env_ls_use          "$@" ;;
        -t|--try)                   ___x_cmd_env_ls___pickapp ___x_cmd_env_ls_try          "$@" ;;
        -i|--installed)             ___x_cmd_env_ls___pickapp ___x_cmd_pkg_ls___installed  "$@" ;;
        *)              N=env M="Unsupported [subcmd=$1]" log:ret:64  ;;
    esac
}

___x_cmd_env_ls_use(){
    local X_help_cmd='___x_cmd help -m env ls use'
    help:arg:parse
    ___x_cmd_pkg_sphere_use ls --sphere X | ___x_cmd_pkg_ls___show_info "="
}

___x_cmd_env_ls_try(){
    local X_help_cmd='___x_cmd help -m env ls try'
    help:arg:parse
    ___x_cmd_pkg_sphere_try ls --sphere X | ___x_cmd_pkg_ls___show_info "="
}

___x_cmd_env_ls_all(){
    local X_help_cmd='___x_cmd help -m env ls all'
    help:arg:parse

    if [ $# -eq 0 ]; then
        ___x_cmd_env_ls___pickapp ___x_cmd_pkg_ls___all_candidate
    else
        ___x_cmd_env_ls___pickapp ___x_cmd_pkg_ls___all "$@"
    fi
}

___x_cmd_env_ls___pickapp(){
    if ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_chatty; then
        local data=; data="$(
            ___X_CMD_PKG_SPHERE_PATH_CONFIG="$___X_CMD_PKG_SPHERE_PATH_CONFIG" \
            ___X_CMD_PICK_SHBIN_CODE="xrc env ;" \
            ___x_cmd pick --col 6 "$@"
        )" || return $?
        [ -n "$data" ] || return $?

        local name=; local version=
        case "$data" in
            */*)
                name="${data%%/*}"
                version="${data#*/}"
                ;;
            *)
                name="${data%% *}"
                local x_=; ___x_cmd str triml_ "${data#* }"
                version="${x_%% *}";
                ;;
        esac
        [ -n "$name" ] || return $?
        [ "$name" != "$version" ] || version=""

        env:info "Selected pkg [name=$name]${version:+" [version=$version]"}"
        local _cmd=
        ___x_cmd ui select ,_cmd "Choose the code you want to execute:" \
            "x env use ${name}${version:+"=${version}"}"    \
            "x env try ${name}${version:+"=${version}"}"    \
            "x env unuse ${name}${version:+"=${version}"}"  \
            "x env untry ${name}${version:+"=${version}"}"  \
            "x env gc ${name}${version:+"=${version}"}"     \
            "x env upgrade ${name}"                         \
            "x browse 'https://x-cmd.com/pkg/${name}'"      \
            "return"    || return $?
        [ -n "$_cmd" ] || return $?
        eval "$_cmd"
    else
        "$@"
    fi
}
