#pragma once
#include <cstdint>
#include <vector>
#include <string>
#include <SFML/Graphics.hpp>
#include <unordered_map>
#include <memory>
#include "matrix.hpp"
#include <nlohmann/json.hpp>

namespace shaders {
  struct Record {
    std::string name;
    std::string file_name;
    std::shared_ptr<sf::Shader> ptr = nullptr;
  };

  struct ShaderManager {
    std::unordered_map<std::string, Record> shaders;
  };

  std::shared_ptr<sf::Shader> get(const std::string& name);
  void init();
  bool load_shader(std::string& name, nlohmann::json& settings);
  bool updated(int my_version);
  int reload();
  int version();
}