#pragma once

#include <SDL3/SDL_rect.h>  // for SDL_FRect, SDL_FPoint

#include <memory>  // for shared_ptr
class Texture;

class Sprite {
    private:
        std::shared_ptr<Texture> texture_;  // Textura con los gráficos del sprite
        SDL_FRect pos_;                     // Posición y tamaño del sprite
        SDL_FRect clip_;                    // Parte de la textura que se va a dibujar

    public:
        // Constructor
        explicit Sprite(std::shared_ptr<Texture> texture);

        // Destructor
        ~Sprite() = default;

        // Establece la posición del sprite
        void setPos(SDL_FPoint pos);

        // Pinta el sprite
        void render();

        // Establece el rectangulo de la textura que se va a pintar
        void setClip(SDL_FRect clip);

        // Establece el tamaño del sprite
        void setSize(float w, float h);

        // Modulación de color
        void setColor(int r, int g, int b);

        // Cambio de textura dinámico
        void setTexture(std::shared_ptr<Texture> texture) { texture_ = texture; }
};