/********************\
|  Copyright 2024,   |
|       Ulysse Cura  |
\********************/

/////////////////////////////////////////////////////////////////////////
//                                                                     //
//   Declaration de la classe TextureManager, elle sert a charger des  //
// texture dans la memoire pour eviter de les recharger tout le temps. //
//                                                                     //
/////////////////////////////////////////////////////////////////////////

#ifndef TEXTURE_MANAGER_HPP
#define TEXTURE_MANAGER_HPP

#include <memory>
#include <SDL2/SDL.h>
#include <string>
#include <unordered_map>

using std::string, std::unique_ptr, std::unordered_map;

class TextureManager {
  public:
    SDL_Texture *LoadTexture(const string &); // Renvoie une texture depuis l'unordered_map ou charge depuis le disque puis renvoie la texture
    void Draw(SDL_Texture *, SDL_Rect, SDL_Rect, bool); // Dessine la texture passé sur l'écran

    void Erase(const string &); // Efface dans l'unordered_map la texture correspondante
    void Clear(); // Clear tout l'unordered_map

  private:
    using texture_ptr = unique_ptr<SDL_Texture, decltype(&SDL_DestroyTexture)>;

    unordered_map<string, texture_ptr> m_textures;
};

#endif
