# shellcheck shell=dash

___x_cmd_pkg_sphere_try(){
    local op="$1"
    case "$op" in
        run|cancel|ls|get_version_)
                shift; ___x_cmd_pkg_sphere_try_"${op}" "$@" ;;
        *)      N=pkg M="sphere try no such option '$op'" log:ret:1 ;;
    esac
}

___x_cmd_pkg_sphere_try_run(){
    pkg:sphere:parse:args

    log:sub:init -i try pkg "pkg[$name] version[$version]"
    pkg:info "Step 1/2, Installing $name $version"

    local x_="" 2>/dev/null >&2;
    ___x_cmd pidofsubshell_

    # TODO: EPOCH=
    ___x_cmd_pkg_sphere add --prebuild  \
        --protection try                \
        --reason "try,PID=$$,SSPID=$x_" \
        --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE"    \
        --osarch "$osarch" "$name" "$version" || {
        pkg:error "Cannot install package - '$name $version'"
        return 1
    }

    pkg:info "Step 2/2, Adding PATH $name $version"
    ___x_cmd_pkg_sphere path add    \
        --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE"    \
        --osarch "$osarch" "$name" "$version" || {
        pkg:error "Cannot add path into pkg - '$name $version'"
        return 1
    }

    pkg:info "Successfully try [pkg=$name] [version=$version] in the current environment"
    log:sub:fini
}

___x_cmd_pkg_sphere_try_cancel(){
    pkg:sphere:parse:args

    log:sub:init -i untry pkg "Canceling try [pkg=$name] [version=$version]"
    ___x_cmd_pkg_sphere path rm     \
        --sphere "$sphere_name" --sphereroot "$___X_CMD_PKG_ROOT_SPHERE"    \
        --osarch "$osarch" "$name" "$version" || return $?

    pkg:info "Success to untry [pkg=$name] [version=$version] in this session"

    log:sub:fini
}

___x_cmd_pkg_sphere_try_ls(){
    pkg:sphere:parse:option
    sphere_name="${sphere_name:-X}"
    local spherepath="$___X_CMD_PKG_ROOT_SPHERE/$sphere_name/$osarch"
    local l=
    ___x_cmd sdict print ___X_CMD_PKG_SPHERE_PATH_CONFIG | while ___x_cmd_readr l; do
        printf "%s\n" "${l#"$spherepath"/}"
    done
}

___x_cmd_pkg_sphere_try_get_version_(){
    pkg:sphere:parse:option
    sphere_name="${sphere_name:-X}"
    local name="$1";    [ -n "$name" ] || N=pkg M="Provide a package name" log:ret:1
    local ___X_CMD_SDICT_GET_=; ___x_cmd sdict get_ ___X_CMD_PKG_SPHERE_PATH_CONFIG "$___X_CMD_PKG_ROOT_SPHERE/$sphere_name/$osarch/$name"
    x_="$___X_CMD_SDICT_GET_"
}
