#pragma once
// data_table_viz_panels — paneles de visualizacion lateral de la tabla TQL.
// Sub-funcion extraida de modules/data_table/data_table.cpp (issue 0107c).
//
// Responsabilidad:
//   - draw_table_toggle: boton de toggle entre modo tabla y ultimo modo viz.
//   - draw_extra_panel: render de un panel de viz adicional (VizPanel) con su
//     toolbar mini (titulo, pin/close, selector de chart).
//   - draw_viz_config_popup: popup de configuracion de visualizacion (columnas
//     x/y, modo, config del grafico activo).
//   - draw_viz_selector: selector de modo de viz (iconos/grid de ViewMode).
//   - maybe_recompute_stats: recalcula las estadisticas de columna si cambiaron
//     los datos visibles (para el stats overlay en headers y config popup).
//
// Rangos del fuente original:
//   - draw_table_toggle      : lineas 1527-1552
//   - draw_extra_panel       : lineas 1553-1638
//   - draw_viz_config_popup  : lineas 1640-1815
//   - draw_viz_selector      : lineas 1816-1892
//   - maybe_recompute_stats  : lineas 2474-2502
//
// Dependencias: data_table_types.h, viz_render.h (viz::render), imgui.h.

#include "core/data_table_types.h"
#include "imgui.h"
#include <vector>
#include <string>

namespace data_table {

// ---------------------------------------------------------------------------
// draw_table_toggle
// Boton que cambia display entre ViewMode::Table y el ultimo modo viz no-tabla.
// `id_suffix` diferencia multiples toggles en la misma ventana.
// `st_ptr` si no null se usa para actualizar `st.display` directamente;
// si null usa display/last_non_table pasados por ref.
// ---------------------------------------------------------------------------
void draw_table_toggle(ViewMode& display, ViewMode& last_non_table,
                       const char* id_suffix,
                       State* st_ptr = nullptr);

// ---------------------------------------------------------------------------
// draw_extra_panel
// Dibuja un VizPanel adicional (child window con toolbar mini + chart).
// Retorna true si el usuario cerro el panel (el caller debe borrar el entry).
// ---------------------------------------------------------------------------
bool draw_extra_panel(State& st, VizPanel& p, int idx,
                      const StageOutput& so,
                      const std::vector<ColumnSpec>* col_specs);

// ---------------------------------------------------------------------------
// draw_viz_config_popup
// Popup de configuracion de visualizacion: columnas x/y, modo de chart,
// colores, histogramas bins, pie radius, etc. Mutates st.viz_config y
// st.extra_panels.
// ---------------------------------------------------------------------------
void draw_viz_config_popup(State& st);

// ---------------------------------------------------------------------------
// draw_viz_selector
// Selector de modo de visualizacion: grid de iconos con ViewMode disponibles.
// Se abre via boton "Ask AI" o desde draw_viz_config_popup.
// ---------------------------------------------------------------------------
void draw_viz_selector(State& st);

// ---------------------------------------------------------------------------
// maybe_recompute_stats
// Recalcula st.stats_cache si el snapshot de datos ha cambiado
// (se detecta por hash de visible_rows + filtros). Solo recalcula si
// st.stats_mode == true.
// ---------------------------------------------------------------------------
void maybe_recompute_stats(State& st,
                           const char* const* cells,
                           int row_count, int orig_cols, int eff_cols,
                           const std::vector<Filter>& active_filters,
                           const std::vector<int>& visible_rows,
                           const std::vector<int>& src_for_eff);

} // namespace data_table
