# shellcheck shell=dash

___x_cmd_val___main(){
    [ -n "$___X_CMD_VAL_O" ] || N="x" M="___X_CMD_VAL_O should never be null" log:ret:1

    [ $# -gt 0 ] || set - get

    local op="$1";  shift
    case "$op" in
        default|pick)       ___x_cmd_val_"$op" "$@" ;;
        *)                  N=x-cmd M="Invalid op=$op" log:ret:1 ;;
    esac
}

___x_cmd_val_pick(){
    local x_=""
    if ___x_cmd_val_default_get_ && x ui yesno "Use the default: $x_"; then
        printf "%s\n" "$x_"
    else
        if [ "$1" = - ]; then
            x pick
        else
            printf "%s\n" "$@" | x pick
        fi
    fi
}

___x_cmd_val_default(){
    [ $# -gt 0 ] || set - get

    local op="$1";  shift
    case "$op" in
        get|get_|set|setifnull)
                ___x_cmd_val_default_"$op" "$@" ;;
        *)      N=x-cmd M="Invalid op=$op" log:ret:1 ;;
    esac
}

___X_CMD_VAL_DEFAULT="$___X_CMD_ROOT_DATA/val/default"
___x_cmd_val_default_set(){
    local value="$1"
    x ensurefp "$___X_CMD_VAL_DEFAULT/$___X_CMD_VAL_O"
    printf "%s\n" "$value" >"$___X_CMD_VAL_DEFAULT/$___X_CMD_VAL_O"
}

___x_cmd_val_default_setifnull(){
    local x_
    if ! ___x_cmd_val_default_get_ 2>/dev/null || [ -z "$x_" ]; then
        ___x_cmd_val_default_set "$1"
    fi
}

___x_cmd_val_default_get_(){
    [ -f "$___X_CMD_VAL_DEFAULT/$___X_CMD_VAL_O" ] || return
    x rat_ "$___X_CMD_VAL_DEFAULT/$___X_CMD_VAL_O"
    x_="${x_%
}"
}

___x_cmd_val_default_get(){
    local x_
    ___x_cmd_val_default_get_ || return
    printf "%s\n" "$x_"
}

