// compute_column_stats — estadisticas por columna (mean, p25/p50/p75, hist, top).
// Promovido del playground tables (issue 0081-F). Pura — sin I/O ni estado.
#pragma once

// NOTE: auto_detect_type.h (parse_number) is required by the .cpp impl only.
// It is NOT included here because data_table_types.h includes this header,
// and auto_detect_type.h itself references ColumnType (defined in
// data_table_types.h) — that would create a circular include.

#include <string>
#include <utility>
#include <vector>

namespace data_table {

// ColStats: estadisticas calculadas para una columna de la tabla.
// Tipo producto (todos los campos siempre presentes).
struct ColStats {
    int    total          = 0;   // filas consideradas (respeta indices si se pasa)
    int    empty_count    = 0;   // celdas nulas o vacias
    int    unique_count   = 0;   // valores distintos (hasta unique_cap)
    bool   unique_capped  = false; // true si se llego al limite unique_cap
    bool   numeric        = false; // true si TODOS los no-vacios son numericos
    int    numeric_count  = 0;
    double min            = 0;
    double max            = 0;
    double sum            = 0;
    double mean           = 0;
    double p25            = 0;
    double p50            = 0;
    double p75            = 0;
    std::vector<float>                    hist;           // HIST_BINS bins normalizados por count
    std::vector<std::pair<std::string,int>> top_categories; // top-8 por frecuencia desc
};

constexpr int HIST_BINS = 24;

// compute_column_stats: calcula ColStats para la columna col de cells (row-major,
// rows x cols). Si indices != nullptr, solo considera las filas listadas en
// indices[0..n_indices-1] (util para filtrar). unique_cap limita el tracking de
// valores unicos para columnas de cardinalidad alta.
ColStats compute_column_stats(const char* const* cells, int rows, int cols,
                              int col, int unique_cap = 100000,
                              const int* indices = nullptr, int n_indices = 0);

} // namespace data_table
