// Lee un archivo CSV y escribe sus filas y un resumen de cada columna.
#include <stdio.h>

#include "table.h"

static void print_rows(const Table *t) {
    for (int r = 0; r < table_rows(t); r++) {
        for (int c = 0; c < table_columns(t); c++) {
            if (c > 0) {
                printf(" | ");
            }
            value_print(table_cell(t, r, c));
        }
        printf("\n");
    }
}

static void print_summary(const Table *t, int column) {
    ColumnSummary s = table_summary(t, column);
    int numbers = s.integers + s.decimals;

    printf("%-12s %7d %9d %7d %6d", table_column_name(t, column), s.integers, s.decimals,
           s.strings, s.nones);
    if (numbers > 0) {
        printf(" %9.2f %7.2f %7.2f %7.2f", s.sum, s.sum / numbers, s.min, s.max);
    }
    printf("\n");
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "Uso: %s archivo.csv\n", argv[0]);
        return 1;
    }

    Table *t = table_load(argv[1]);
    if (t == NULL) {
        fprintf(stderr, "No se pudo leer %s\n", argv[1]);
        return 1;
    }

    printf("%d filas y %d columnas\n\n", table_rows(t), table_columns(t));
    print_rows(t);

    printf("\n%-12s %7s %9s %7s %6s %9s %7s %7s %7s\n", "columna", "enteros", "decimales",
           "cadenas", "nada", "suma", "media", "min", "max");
    for (int c = 0; c < table_columns(t); c++) {
        print_summary(t, c);
    }

    table_free(t);
    return 0;
}
