#pragma once

#include <SDL3/SDL.h>

#include "core/rendering/animatedsprite.h"  // for AnimatedSprite
class Texture;

// Clase SmartSprite
class SmartSprite : public AnimatedSprite {
   public:
    SmartSprite(Texture *texture, SDL_Renderer *renderer);  // Constructor

    void init();             // Inicializa el objeto
    void update() override;  // Actualiza la posición y comprueba si ha llegado a su destino
    void render() override;  // Pinta el objeto en pantalla

    [[nodiscard]] auto getEnabledCounter() const -> int;  // Obtiene el valor de la variable
    void setEnabledCounter(int value);                    // Establece el valor de la variable
    void setDestX(int x);                                 // Establece el valor de la variable
    void setDestY(int y);                                 // Establece el valor de la variable
    [[nodiscard]] auto getDestX() const -> int;           // Obtiene el valor de la variable
    [[nodiscard]] auto getDestY() const -> int;           // Obtiene el valor de la variable
    [[nodiscard]] auto isOnDestination() const -> bool;   // Obtiene el valor de la variable
    [[nodiscard]] auto hasFinished() const -> bool;       // Obtiene el valor de la variable

   private:
    // Variables
    bool on_destination_;  // Indica si está en el destino
    int dest_x_;           // Posicion de destino en el eje X
    int dest_y_;           // Posicion de destino en el eje Y
    int enabled_counter_;  // Contador para deshabilitarlo
    bool finished_;        // Indica si ya ha terminado

    void checkMove();      // Comprueba el movimiento
    void checkFinished();  // Comprueba si ha terminado
};
