#pragma once
#include <string>

namespace fn::gfx {

struct CompileResult {
    unsigned int program = 0;   // GL program id, 0 si falla
    bool ok = false;
    int err_line = -1;           // línea parseada del infoLog, -1 si no
    std::string err_msg;
};

// Compila un fragment shader GLSL (sólo el cuerpo del usuario).
// Prepends automáticamente: version, out vec4 fragColor, y uniforms u_resolution/u_time/u_mouse.
// Usa un vertex shader fijo que genera un fullscreen quad via gl_VertexID.
// Si falla, program = 0. Si ok, program es una id válida de glProgram lista para usar.
CompileResult compile_fragment(const std::string& user_fragment_src);

// Libera el programa. Seguro con id = 0.
void delete_program(unsigned int program);

} // namespace fn::gfx
