# shellcheck shell=sh disable=SC3043
# Section 2: param_marg -- Helper for param user: Handle param marg

___x_cmd_param_marg(){
    case "$1" in
        get)        shift; param_marg_get "$@" ;;
        len)        shift; param_marg_len "$@" ;;
        seq)        shift; param_marg_seq "$@" ;;
        *)          param_marg "$@" ;;
    esac
}

# Example:
# for idx in $(param_marg optname); do
#     param_marg optname "$idx"
# done

param_marg() {
    local a="$1"
    [ -n "$a" ] || M="Provide option name" N="param" log:ret:64
    if [ -n "$2" ]; then
        param_marg_get "$@"
    else
        param_marg_seq "$@"
    fi
}

param_marg_get() {
    local a="$1"
    local n="$2"
    [ -n "$a" ] || M="Provide option name"              N="param" log:ret:64
    [ -n "$n" ] || M="Provide option argument index"    N="param" log:ret:64
    if [ -z "$3" ]; then
        eval "printf \"%s\\n\" \"\$${a}_${n}\""
    else
        eval "printf \"%s\\n\" \"\$${a}_${n}_${3}\""
    fi
}

param_marg_len() {
    local a="$1"
    [ -n "$a" ] || M="Provide option name" N="param" log:ret:64
    eval "printf \"%s\\n\" \"\$${a}_n\""
}

param_marg_seq() {
    local a="$1"
    [ -n "$a" ] || M="Provide option name" N="param" log:ret:64
    seq "$(param_marg_len "$a")"
}
