# shellcheck shell=dash

# try = add migrate + path + check boot + save env
___x_cmd_pkg_env_try(){
    local X_help_cmd='___x_cmd help -m pkg try'
    pkg:sphere:parse:option
    sphere_name="${sphere_name:-X}"

    local name=
    local version=

    local i=;
    for i in "$@"; do
        ___x_cmd_pkg___pasre_pkg_version_set "$i" || return $?
        ___x_cmd_pkg_env_try___handle || return $?
    done
}

___x_cmd_pkg_env_try___handle(){
    local x_=;
    ___x_cmd_pkg_sphere_try get_version_ \
        --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE" \
        --osarch "$osarch" "$name"  || return $?
    if [ -n "$x_" ]; then       # already has try version
        if [ "$x_" = "$version" ]; then
            if ___x_cmd_pkg_sphere_populate_done \
                --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE" \
                --osarch "$osarch" "$name" "$version"; then
                pkg:info "Already tried [pkg=$name] [version=$x_] in this shell env"
                return 0
            fi
        else
            pkg:warn "Before trying new version, untry ${name}=${x_}"
            ___x_cmd_pkg_env_untry "${name}=${x_}" || return $?
        fi
    fi

    ___x_cmd_pkg_sphere_try run \
        --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE" \
        --osarch "$osarch" "$name" "$version"
}


___x_cmd_pkg_env_untry(){
    local X_help_cmd='___x_cmd help -m pkg untry'
    pkg:sphere:parse:option
    sphere_name="${sphere_name:-X}"

    local i; local name=; local version=; local x_=;
    for i in "$@"; do
        case "$i" in
            *=*)    name="${i%%=*}"; version="${i#*=}"      ;;
            *)      x_=; ___x_cmd_pkg_sphere_try get_version_ \
                        --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE" \
                        --osarch "$osarch" "$i"
                    name="$i"; version="$x_"
                    ;;
        esac
        [ -n "$version" ] || {
            pkg:warn "Not try $name in current session"
            return 0
        }

        ___x_cmd_pkg_sphere_try cancel  \
            --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE" \
            --osarch "$osarch" "$name" "$version" || return $?
    done
}
