# shellcheck    shell=sh            disable=SC3043,SC2034      # xrc

# Provide infomation for specific pkg and version

# TODO: \\n \n ?
___x_cmd_pkg_ll(){
    ___x_cmd_pkg_ll_inner "\\n"
}

___x_cmd_pkg_ll_inner()(
    local X_help_cmd='___x_cmd help -m pkg ll'; help:arg:parse
    # TODO: Need to be removed in the future
    ___x_cmd_pkg_update___check || return $?
    local sep="${1:-"\\t"}"
    ___x_cmd_cmds_cd "$___X_CMD_PKG_METADATA_PATH" || return $?
    local i; for i in */*/meta.tt.json; do
        printf "%s${sep}" "${i%"/meta.tt.json"}"
    done 2>/dev/null
)

___x_cmd_pkg___split_name_version_(){
    ___x_cmd_pkg___locate_name_version_exist___filepath_ "$@" || \
        ___x_cmd_pkg___split_name_version_exist___metadata_ "$@"
}

___x_cmd_pkg___locate_name_version_exist___filepath_(){
    x_name="${1%%_v*}"
    x_version="${1#"$x_name"_}"
    local p; p="$( ___x_cmd_cmds find "$___X_CMD_PKG_ROOT_SPHERE" -mindepth 4 -maxdepth 4 -type d -path "*${x_name}/${x_version}" )"
    [ -z "$p" ] || return 0

    local l=;
    while ___x_cmd_readr l; do
        x_name="${l#*/}"
        x_version="${1#"$x_name"_}"
        p="$( ___x_cmd_cmds find "$___X_CMD_PKG_ROOT_SPHERE" -mindepth 4 -maxdepth 4 -type d -path "*${x_name}/${x_version}" )"
        [ -z "$p" ] || return 0
    done <<A
$( ___x_cmd_pkg_ll | ___x_cmd_cmds grep "/${1%%_v*}" )
A
    return 1
}

___x_cmd_pkg___split_name_version_exist___metadata_(){
    x_name=; x_version=
    local l=; while ___x_cmd_readr l; do
        x_name="${l#*/}"
        x_version="${1#"$x_name"_}"
        ___x_cmd_pkg___split_name_version_exist___metadata_inner "$l" "$x_version" || continue
        return 0
    done <<A
$( ___x_cmd_pkg_ll | ___x_cmd_cmds grep "/${1%%_v*}" )
A
    return 1
}

___x_cmd_pkg___split_name_version_exist___metadata_inner(){
    local locate_name="$1"
    local version="$2"
    ___x_cmd_pkg___is_support_version "$locate_name" "$version"
}
