# shellcheck    shell=dash disable=SC2142,SC2154

# /bin
# /man
# /...


# spent 3 days from tree/desk/colony to ... reactor, now sphere.
# reactor is powerful, but sphere is organzied with posibilities.

# local X_help_cmd='___x_cmd help -m pkg'
# pkg:sphere:parse:option
# sphere_name="${sphere_name:-"X"}"
alias pkg:sphere:parse:option='
    local sphere_name=; local osarch=
    while [ "$#" -gt 0 ]; do
        case "$1" in
            --sphere)
                    sphere_name="$2";
                    [ -n "$sphere_name" ] || M="Provide a sphere name" N=pkg log:ret:1
                    shift 2
                    ;;
            --sphereroot)
                    local ___X_CMD_PKG_ROOT_SPHERE="$2"
                    [ -n "$___X_CMD_PKG_ROOT_SPHERE" ] || M="Provide sphere root path" N=pkg log:ret:1
                    shift 2
                    ;;
            --osarch)
                    osarch="$2"; shift 2 ;;
            -h|--help)
                    help:show:ret:0 ;;
            *)      break ;;
        esac
    done
    [ -n "$osarch" ] || { ___x_cmd_pkg_osarch_ || return 1; osarch="$___X_CMD_PKG_OSARCH"; } || N=pkg M="Not found osarch" log:ret:1
'

___x_cmd_pkg_sphere___parse_name_version(){
    name="$1";    [ -n "$name" ] || N=pkg M="Provide a package name" log:ret:1
    version="$2"; [ -n "$version" ] || {
        local x_=""; ___x_cmd_pkg_default_version_ "$name" "$osarch" || return $?
        version="$x_"
    }
    [ -n "$version" ] || N=pkg M="Not found $name version" log:ret:1
}

alias pkg:sphere:name-version='
    local name=; local version=;
    ___x_cmd_pkg_sphere___parse_name_version "$@" || return $?
'

# --sphere <sphere name> --sphereroot <sphere root> --osarch <osarch> <pkgname> <version>
alias pkg:sphere:parse:args='
    pkg:sphere:parse:option
    sphere_name="${sphere_name:-"X"}"
    pkg:sphere:name-version
'

xrc:mod:lib pkg     sphere/boot/_index   sphere/path/_index

___x_cmd lazyfun    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/gc/_index"   ___x_cmd_pkg_sphere_gc  \
                    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/link"        ___x_cmd_pkg_sphere_link \
                    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/xbin"        ___x_cmd_pkg_sphere_xbin \
                    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/snap"        ___x_cmd_pkg_sphere_snap \
                    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/try"         ___x_cmd_pkg_sphere_try \
                    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/use"         ___x_cmd_pkg_sphere_use

___x_cmd lazysrc    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/add/_index" \
                    ___x_cmd_pkg_sphere_add         \
                    ___x_cmd_pkg_sphere_depend      \
                    ___x_cmd_pkg_sphere_lastaddts   \
                    ___x_cmd_pkg_sphere_populate


___x_cmd lazysrc    "$___X_CMD_ROOT_MOD/pkg/lib/sphere/run" \
                    ___x_cmd_pkg_sphere_runpkgbin   \
                    ___x_cmd_pkg_sphere_getbinpath_

___x_cmd_pkg_sphere(){
    [ $# -gt 0 ] || set -- --help

    local op="$1";  shift
    case "$op" in
        add|boot|unboot|bootrc|gc|\
        getbinpath_|runpkgbin|xbin|snap|\
        link|path|try|use|depend|populate|fastboot)
            ___x_cmd_pkg_sphere_"$op" "$@"
            ;;
        *)  N=pkg M="sphere no such [subcmd=$op]" log:ret:1
    esac
}


