#pragma once

// Contour plot 2D via marching squares.
// Layout puro (contour_compute) separado del render (contour).

#include "imgui.h"
#include <vector>

struct ContourLine {
    std::vector<ImVec2> pts; // segmentos: pts[2k], pts[2k+1] forman un segmento
    float               level;
};

// Marching squares clasico (16 casos). Para cada nivel, devuelve un ContourLine
// con los segmentos en coords [0..nx-1] x [0..ny-1] del grid (no escaladas).
std::vector<ContourLine> contour_compute(const float* grid,
                                         int          nx,
                                         int          ny,
                                         const float* levels,
                                         int          n_levels);

// Render. size.x <= 0 => ancho disponible. Escala los segmentos a la region dada.
void contour(const char* id,
             const float* grid,
             int          nx,
             int          ny,
             const float* levels,
             int          n_levels,
             ImVec2       size = ImVec2(-1.0f, 300.0f));
