#pragma once
// data_table_ai_panel — modal "Ask AI" de la tabla TQL.
// Sub-funcion extraida de modules/data_table/data_table.cpp (issue 0107c).
//
// Responsabilidad:
//   - draw_ask_ai_modal: modal ImGui con prompt de lenguaje natural, llamada
//     a llm_anthropic::ask, render de la respuesta (codigo TQL/SQL editable),
//     botones Apply/Reject/Close, export CSV de la respuesta.
//
// El modal usa UiState.ask_* que se mueve aqui (AskAiState) para
// encapsulacion. Vive en UiState del data_table principal — no en State.
//
// Dependencia con llm_anthropic:
//   - Si FN_LLM_ANTHROPIC esta definido: usa core/llm_anthropic.h (real).
//   - Si no: el stub del data_table.cpp provee tipos/funciones no-op.
//   - Tras la extraccion este modulo incluye el stub o el header real.
//
// Rangos del fuente original:
//   - Modal "Ask AI"  : lineas 4636-4755
//   - Boton trigger   : linea 1869 (dentro de draw_viz_selector)
//
// Dependencias: data_table_types.h, llm_anthropic.h (o stub), imgui.h.

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

namespace data_table {

// AskAiState: estado del modal Ask AI. Debe persistir entre frames
// (es parte de UiState). Extraido aqui para encapsulacion.
struct AskAiState {
    bool         open         = false;
    bool         busy         = false;
    int          mode         = 0;     // 0 = TQL, 1 = SQL (DuckDB)
    char         question[2048] = {};
    std::string  current_tql;          // TQL emitido del state al abrir modal
    std::string  response_raw;         // texto raw del modelo
    std::string  response_code;        // bloque extraido (Lua o SQL)
    std::string  error;
    std::string  status;               // "Sending..." / "Got response." / error
    char         edit_buf[8192] = {};  // buffer editable de la propuesta
};

// draw_ask_ai_modal — dibuja el modal "Ask AI".
// Debe llamarse cada frame (pattern ImGui). Abre el popup si ask_ai.open==true.
//
// Parametros:
//   ask_ai       — estado mutable del modal.
//   st           — State principal (para tql::apply en Apply + active_headers/types).
//   active_headers / active_types — snapshot del output activo (para la llamada llm).
//   orig_cols    — numero de cols originales (para tql::apply signature).
// ---------------------------------------------------------------------------
void draw_ask_ai_modal(AskAiState& ask_ai,
                       State& st,
                       const std::vector<std::string>& active_headers,
                       const std::vector<ColumnType>&  active_types,
                       int orig_cols);

} // namespace data_table
