#pragma once

#include <memory>            // Para unique_ptr, shared_ptr
#include <string>            // Para string
#include <vector>            // Para vector
#include "animated_sprite.h" // Para AnimatedSprite
class Texture;               // lines 7-7

struct ExplosionTexture
{
    int size;                           // Tamaño de la explosión
    std::shared_ptr<Texture> texture;   // Textura para la explosión
    std::vector<std::string> animation; // Animación para la textura

    // Constructor
    ExplosionTexture(int sz, std::shared_ptr<Texture> tex, const std::vector<std::string> &anim)
        : size(sz), texture(tex), animation(anim) {}
};

// Clase explosions
class Explosions
{
private:
    // Variables
    std::vector<ExplosionTexture> textures_;                  // Vector con las texturas a utilizar
    std::vector<std::unique_ptr<AnimatedSprite>> explosions_; // Lista con todas las explosiones

    // Vacia el vector de elementos finalizados
    void freeExplosions();

    // Busca una textura a partir del tamaño
    int getIndexBySize(int size);

public:
    // Constructor
    Explosions() = default;

    // Destructor
    ~Explosions() = default;

    // Actualiza la lógica de la clase
    void update();

    // Dibuja el objeto en pantalla
    void render();

    // Añade texturas al objeto
    void addTexture(int size, std::shared_ptr<Texture> texture, const std::vector<std::string> &animation);

    // Añade una explosión
    void add(int x, int y, int size);
};