#pragma once

// sql_parse — tokenizer y clasificador de statements SQL (logica pura).
//
// Separa una cadena multi-statement por ';' (fuera de strings y comentarios)
// y clasifica cada statement por su keyword inicial. No ejecuta nada — esta
// funcion es 100% pura: misma entrada, misma salida.
//
// Uso tipico:
//
//   auto stmts = fn_ui::sql_parse("SELECT 1; INSERT INTO t VALUES (2);");
//   for (auto& s : stmts) {
//       switch (s.kind) { ... }
//   }

#include <string>
#include <vector>

namespace fn_ui {

enum class SqlStmtKind {
    Unknown,
    Select,
    Insert,
    Update,
    Delete,
    Create,
    Drop,
    Alter,
    Pragma,
    Explain,
};

struct SqlStatement {
    SqlStmtKind kind  = SqlStmtKind::Unknown;
    std::string text;          // texto trimeado (sin ';' final)
    int         line  = 1;     // linea de inicio en el input (1-based)
};

// Tokeniza SQL multi-statement. Salta cadenas '...' "..." `...` y comentarios
// -- linea y /* bloque */. Devuelve los statements no vacios.
std::vector<SqlStatement> sql_parse(const std::string& input);

// Clasifica un statement individual por su keyword inicial (case-insensitive,
// despues de saltar whitespace y comentarios iniciales).
SqlStmtKind sql_classify(const std::string& stmt);

} // namespace fn_ui
