# shellcheck shell=sh disable=SC3043,2012,SC2016

___x_cmd_env_lsenv_app_processer___datarequest()(
    ___x_cmd_pkg_update___check || return $?
    if [ -n "$___X_CMD_ENV_LL_LIST" ]; then
        ___x_cmd_cmds_cd "$___X_CMD_PKG_METADATA_PATH" 2>/dev/null || return $?
        if [ "$#" -lt 2 ]; then
            ___x_cmd_cmds_ls "$@" | ___x_cmd arg1 '[ -f "$1" ] || printf "%s\n" "$1"'
            return 0
        fi

        local filepath="$___X_CMD_PKG_METADATA_PATH/$1/$2/info.tt.json"
        [ -f "$filepath" ] || return $?
        shift 2
    else
        if [ "$#" -lt 1 ]; then
            ___x_cmd pkg ll | ___x_cmd arg1 '[ -f "$1" ] || printf "%s\n" "$1"'
            return 0
        fi
        local filepath="$___X_CMD_PKG_METADATA_PATH/$1/info.tt.json"
        [ -f "$filepath" ] || return $?
        shift 1
    fi

    ARGS="$*" os="$(___x_cmd os name)" arch="$(___x_cmd os arch)" region="$___X_CMD_LANG" \
    ___x_cmd cawk -m j/json,j/jiter -f "$___X_CMD_ROOT_MOD/env/lib/app/data_request.awk" < "$filepath"
)

___x_cmd_env_lsenv_app_processer(){
    local args
    local content
    case "$1" in
        data:request:*)
            args="${1#*data:request:}"
            content="$( eval "___x_cmd_env_lsenv_app_processer___datarequest $args" 2>/dev/null )" || {
                printf "errexit:lsenv error exit:%s" "$args"
                return
            }
            printf "data:item:%s\n" "$args"
            printf "%s\n" "$content"
            ;;
        x:browse:*)
            local url="${1#x:browse:}"
            ___x_cmd browse "$url"
            ;;
    esac
}

___x_cmd_env_lsenv_app(){
    ___X_CMD_ENV_LL_LIST="$___X_CMD_ENV_LL_LIST" \
    ___X_CMD_SHBIN_CODE='
        xrc env ;
        "$@"
    ' ___x_cmd antizshbin ___x_cmd_env_lsenv_app___
}

___x_cmd_env_lsenv_app___(){
    local ___X_CMD_ENV_LSENV_APP_CANDIDATE=
    local ___X_CMD_ENV_LSENV_FINAL_COMMAND=; local ___X_CMD_TUI_APP_IS_SMALL_SCREEN=; local ___X_CMD_TUI_CURRENT_ENVAPP_POSITION=
    ___x_cmd_tui_app_processer(){ ___x_cmd_env_lsenv_app_processer "$@"; }

    local x_=; ___x_cmd tui position get_ envapp
    ___X_CMD_ENV_NAVI_POSITION="$x_" \
    ___x_cmd tui bigapp --clear-on-exit \
        -f "$___X_CMD_ROOT_MOD/tui/lib/eg.comp/navi.comp.awk" \
        -f "$___X_CMD_ROOT_MOD/env/lib/app/lsenv.awk"
    unset -f ___x_cmd_tui_app_processer
    ___x_cmd tui position store envapp "$___X_CMD_TUI_CURRENT_ENVAPP_POSITION"
    if [ "$___X_CMD_ENV_LSENV_FINAL_COMMAND" = "q" ]; then return 0
    fi
    [ -z "$___X_CMD_ENV_LSENV_APP_CANDIDATE" ] || printf "%s\n" "$___X_CMD_ENV_LSENV_APP_CANDIDATE"
    [ "$___X_CMD_ENV_LSENV_FINAL_COMMAND" = "ENTER" ] || return 1
}


___x_cmd_env_choose_after_ui(){
    local x_=; ___x_cmd storeread_ ___x_cmd_env_lsenv_app
    [ -n "$x_" ] || return $?
    local id=""
    ___x_cmd ui select id "What to do NEXT" \
    "x env use $x_"    \
    "x env try $x_"    \
    "x browse 'https://x-cmd.com/pkg/${x_%%=*}'"    \
    "EXIT"     || return $?

    case "$id" in
        1)      ___x_cmd env use "$x_" ;;
        2)      ___x_cmd env try "$x_" ;;
        3)      ___x_cmd browse "https://x-cmd.com/pkg/${x_%%=*}" ;;
        *)
            env:info "EXIT [code=0]"
            return 0 ;;
    esac
}

