# shellcheck shell=dash

# Section: datasets
# GET /datasets/{provider_code}
# GET /datasets/{provider_code}/{dataset_code}
___x_cmd_dbnomics_dataset(){
    [ "$#" -gt 0 ] || set -- ls
    local op="$1"; shift
    case "$op" in
        ls|list)      ___x_cmd_dbnomics_dataset_ls   "$@" ;;
        get)          ___x_cmd_dbnomics_dataset_get  "$@" ;;
        --app|--raw|--json|--csv|--tsv|--limit|--offset)
                        set -- "$op" "$@"
                        ___x_cmd_dbnomics_dataset_ls "$@" ;;
        -h|--help)    ___x_cmd help -m dbnomics dataset "$@" ;;
        *)
            for _arg in "$@"; do
                case "$_arg" in
                    --app|--raw|--json|--csv|--tsv)
                        set -- "$_arg" "$op" "$@"
                        ___x_cmd_dbnomics_dataset_ls "$@"
                        return ;;
                esac
            done
            ___x_cmd_dbnomics_dataset_ls "$op" "$@" ;;
    esac
}

___x_cmd_dbnomics_dataset_ls(){
    local op="--app"
    while [ "$#" -gt 0 ]; do
        case "$1" in
            --app|--raw|--json|--csv|--tsv)
                op="$1"; shift ;;
            -h|--help)
                ___x_cmd help -m dbnomics dataset ls "$@"; return ;;
            *) break ;;
        esac
    done
    case "$op" in
        --app)        ___x_cmd_dbnomics_dataset_ls___app   "$@" ;;
        --raw)        ___x_cmd_dbnomics_dataset_ls___raw   "$@" ;;
        --json)       ___x_cmd_dbnomics_dataset_ls___json  "$@" ;;
        --csv)        ___x_cmd_dbnomics_dataset_ls___csv   "$@" ;;
        --tsv)        ___x_cmd_dbnomics_dataset_ls___tsv   "$@" ;;
    esac
}

___x_cmd_dbnomics_dataset_ls___raw(){
    local provider_code=""
    local arg=""
    while [ "$#" -gt 0 ]; do
        case "$1" in
            --app|--raw|--json|--csv|--tsv) shift ;;
            --limit)    arg="${arg:+${arg}&}limit=$2"; shift 2 ;;
            --offset)   arg="${arg:+${arg}&}offset=$2"; shift 2 ;;
            *)          provider_code="$1"; shift ;;
        esac
    done
    [ -n "$provider_code" ] || M='Provide a provider code' N=dbnomics log:ret:1
    [ -n "$arg" ] && arg="?${arg}"
    ___x_cmd_dbnomics_api get "/datasets/${provider_code}${arg}"
}

___x_cmd_dbnomics_dataset_ls___json(){
    ___x_cmd_dbnomics_dataset_ls___raw "$@" | jq .
}

___x_cmd_dbnomics_dataset_ls___csv(){
    ___x_cmd_dbnomics_dataset_ls___raw "$@" \
        | ___x_cmd_dbnomics___json2csv datasets.docs .code .name .provider_code .provider_name .nb_series .indexed_at \
        | ___x_cmd csv header --add code name provider_code provider_name nb_series indexed_at
}

___x_cmd_dbnomics_dataset_ls___tsv(){
    printf "code\tname\tprovider_code\tprovider_name\tnb_series\tindexed_at\n"
    ___x_cmd_dbnomics_dataset_ls___raw "$@" \
        | ___x_cmd_dbnomics___json2tsv datasets.docs .code .name .provider_code .provider_name .nb_series .indexed_at
}

___x_cmd_dbnomics_dataset_ls___app(){
    if ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_manual ; then
        ___x_cmd_dbnomics_dataset_ls___csv "$@" | ___x_cmd csv app
    else
        ___x_cmd_dbnomics_dataset_ls___tsv "$@"
    fi
}

# GET /datasets/{provider_code}/{dataset_code}
___x_cmd_dbnomics_dataset_get(){
    local op="--app"
    while [ "$#" -gt 0 ]; do
        case "$1" in
            --app|--raw|--json)
                op="$1"; shift ;;
            -h|--help)
                ___x_cmd help -m dbnomics dataset get "$@"; return ;;
            *) break ;;
        esac
    done
    case "$op" in
        --app)        ___x_cmd_dbnomics_dataset_get___app   "$@" ;;
        --raw)        ___x_cmd_dbnomics_dataset_get___raw   "$@" ;;
        --json)       ___x_cmd_dbnomics_dataset_get___json  "$@" ;;
    esac
}

___x_cmd_dbnomics_dataset_get___raw(){
    local provider_code="$1"
    local dataset_code="$2"
    [ -n "$provider_code" ] || M='Provide a provider code' N=dbnomics log:ret:1
    [ -n "$dataset_code" ]  || M='Provide a dataset code'  N=dbnomics log:ret:1
    ___x_cmd_dbnomics_api get "/datasets/${provider_code}/${dataset_code}"
}

___x_cmd_dbnomics_dataset_get___json(){
    ___x_cmd_dbnomics_dataset_get___raw "$@" | jq .
}

___x_cmd_dbnomics_dataset_get___app(){
    ___x_cmd_dbnomics_dataset_get___json "$@"
}
# EndSection
