#pragma once
#include <array>
#include <string>
#include <unordered_map>
#include <vector>

#include "gfx/uniform_parser.h"

namespace fn::gfx {

struct UniformStore {
    std::unordered_map<std::string, std::array<float, 4>> values;
};

// Mantiene el store sincronizado con los descriptores actuales.
void uniforms_sync(UniformStore& store, const std::vector<UniformDescriptor>& descs);

// Renderiza widgets ImGui en el panel actual (llamar entre Begin/End).
void uniforms_panel(UniformStore& store, const std::vector<UniformDescriptor>& descs);

// Llama glUniform* sobre el programa GL activo (el caller debe haber llamado glUseProgram).
void uniforms_apply(const UniformStore& store, const std::vector<UniformDescriptor>& descs, unsigned int program);

} // namespace fn::gfx
