# shellcheck shell=dash
xrc:mod:lib     envy            load_rc compile load

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

    local op="$1"; shift
    case "$op" in
        put|get|get_|ls|key|load|set|set_|unset|unset_|compile|transpose_)
            "___x_cmd_envy_${op}" "$@"
            ;;
        -h|--help)
            ___x_cmd_envy_help
            ;;
        *)
            ___x_cmd_envy_help "$@"
    esac
}

___x_cmd_envy_help(){
    ___x_cmd help -m envy "$@"
}

# Hybrid
# x_ali_zone="cn-hangzhou-a"

# x.ali.zone => x_ali_zone
___x_cmd_envy_transpose_(){
    [ "$#" -eq 1 ] || M="var transpose accept only one arguments. Now get $#" N=envy log:ret:64
    x_=;    local name="$1"
    while true; do
        case "$name" in
            *=*)    M='Variable names cannot have an equal sign' N=envy log:ret:1;;
            *.*)    name="${name%%.*}_${name#*.}" ;;
            *-*)    name="${name%%-*}_${name#*-}" ;;
            */*)    name="${name%%/*}_${name#*/}" ;;
            *)      break ;;
        esac
    done
    ___x_cmd_validenvname "$name" || return
    x_="x_$name"
}

___x_cmd_envy_put(){
    [ "$#" -eq 2 ] || {
        x:error "___x_cmd_envy_put accept only two arguments. Now get $#"
        return 64
    }
    local x_=
    ___x_cmd_envy_transpose_ "$1"
    eval "${x_}=\"\$2\""
}

___x_cmd_envy_get(){
    local x_=
    ___x_cmd_envy_get_ "$@" || return
    printf "%s\n" "${x_}"
}

___x_cmd_envy_get_(){
    [ "$#" -eq 1 ] || {
        x:error "___x_cmd_envy_put accept only one arguments. Now get $#"
        return 64
    }

    x_=
    ___x_cmd_envy_transpose_ "$1" || return
    eval "x_=\"\$${x_}\""
}


___x_cmd_envy_ls()(
    ___x_cmd set var ls "x_$1"
)

___x_cmd_envy_key()(
    ___x_cmd set var key "x_$1"
)

# TODO:
___x_cmd_envy___gen_var(){
    ___x_cmd_cmds_awk \
    -f "$___X_CMD_ROOT_MOD/awk/lib/core.awk"        \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/json.awk"      \
    -f "$___X_CMD_ROOT_MOD/awk/lib/j/jiter.awk"     \
    -f "$___X_CMD_ROOT_MOD/envy/lib/awk/gen.var.awk"
}
