# shellcheck shell=dash

___X_CMD_SNAP_RUNMODE_DATA="$___X_CMD_ROOT_DATA/snap/runmode"
[ -n "$___X_CMD_SNAP_RUNMODE" ] || [ ! -f "$___X_CMD_SNAP_RUNMODE_DATA" ] || {
    read -r ___X_CMD_SNAP_RUNMODE <"$___X_CMD_SNAP_RUNMODE_DATA"
}
___X_CMD_SNAP_RUNMODE="${___X_CMD_SNAP_RUNMODE:-auto}"

___x_cmd_snap_runmode(){
    local op="$1";
    case "$op" in
        -h|--help)  ___x_cmd help -m snap --runmode; return ;;
        "")         ___x_cmd help -m snap --runmode >&2; return 64 ;;
        use|try|get)
                    shift; ___x_cmd_snap_runmode_"$op" "$@" ;;
        *)          N=snap M="Unknown subcmd -> $op" log:ret:64 ;;
    esac
}

___x_cmd_snap_runmode_try(){
    case "$1" in
        -h|--help)  ___x_cmd help -m snap --runmode try; return ;;
        "")         ___x_cmd help -m snap --runmode try >&2; return 64 ;;
        sys|auto|apt|brew|dnf)
                    ___X_CMD_SNAP_RUNMODE="$1"
                    ___x_cmd log :snap info "Snap run mode set to '$___X_CMD_SNAP_RUNMODE'"
                    ;;
        # TODO: pixi asdf pkgx nix
        *)          N=snap M="Unsupported mode -> $1" log:ret:64 ;;
    esac
}

___x_cmd_snap_runmode_use(){
    case "$1" in
        -h|--help)  ___x_cmd help -m snap --runmode use; return ;;
        "")         ___x_cmd help -m snap --runmode use >&2; return 64 ;;
    esac

    ___x_cmd_snap_runmode_try "$1" || return $?
    ___x_cmd ensurefp "$___X_CMD_SNAP_RUNMODE_DATA"
    printf "%s\n" "$___X_CMD_SNAP_RUNMODE" >"$___X_CMD_SNAP_RUNMODE_DATA"
}

___x_cmd_snap_runmode_get(){
    printf "%s\n" "$___X_CMD_SNAP_RUNMODE" >&2
}

# Using runmode

# x snap --runmode try xpkg       -> some pkg we will use pixi
# x snap --runmode try sys
# x snap --runmode try prompt
