# shellcheck shell=dash

xrc:mod:lib     tsv     header

___x_cmd_tsv___main(){
    local X_help_cmd='x help -m tsv'; help:arg-null:parse
    local op="$1"; shift
    case "$op" in
        header|\
        tocsv|fromcsv|awk|addcol)
            ___x_cmd_tsv_"$op" "$@"
            ;;
        *)      N=tsv M="Unknown subcmd" log:ret:64
    esac
}

# convert the data into tsv ...
# this will rely on the csv module, or csv rely on tsv module
# tsv module is very suitable for the output .. but not good for the text processing

# but tsv is very suitable for the awk processing

# x ps --tsv | x tsv awk ''
# x ps --tsv-awk ''
___x_cmd_tsv_awk(){
    local op="$1"
    case "$op" in
        -h|--help)  ___x_cmd help -m tsv awk; return ;;
    esac

    ___x_cmd cawk \
        -f "$___X_CMD_ROOT_MOD/tsv/lib/awk/tsv.awk" \
        -f "$___X_CMD_ROOT_MOD/tsv/lib/awk/tsva.awk" \
        "$@"
}

___x_cmd_tsv_fromcsv(){
    local op="$1"
    case "$op" in
        -h|--help)  ___x_cmd help -m tsv fromcsv; return ;;
        *)
                    [ ! -t 0 ] || {
                        ___x_cmd help -m tsv fromcsv >&2
                        return 64
                    }
                    ;;
    esac

    ___x_cmd cawk -i -m j/json,csv \
        -f "$___X_CMD_ROOT_MOD/tsv/lib/awk/csv2tsv.awk"
}

___x_cmd_tsv_tocsv(){
    local op="$1"
    case "$op" in
        -h|--help)  ___x_cmd help -m tsv tocsv; return ;;
        *)
                    [ ! -t 0 ] || {
                        ___x_cmd help -m tsv tocsv >&2
                        return 64
                    }
                    ;;
    esac

    ___x_cmd_cmds awk -v FS="\t" \
        -f "$___X_CMD_ROOT_MOD/awk/lib/core.awk" \
        -f "$___X_CMD_ROOT_MOD/awk/lib/csv.awk" \
        -f "$___X_CMD_ROOT_MOD/tsv/lib/awk/tsv2csv.awk"
}

___x_cmd_tsv_addcol(){
    local op="$1"
    case "$op" in
        -h|--help)  ___x_cmd help -m tsv addcol; return ;;
    esac

    ___x_cmd_cmds awk -v FS="\t" \
        -f "$___X_CMD_ROOT_MOD/tsv/lib/awk/addcol.awk"
}
