#pragma once

#include <SDL3/SDL.h>

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

// Clase SmartSprite
class SmartSprite : public AnimatedSprite {
   private:
    // Variables
    bool onDestination;  // Indica si está en el destino
    int destX;           // Posicion de destino en el eje X
    int destY;           // Posicion de destino en el eje Y
    int enabledCounter;  // Contador para deshabilitarlo
    bool finished;       // Indica si ya ha terminado

    // Comprueba el movimiento
    void checkMove();

    // Comprueba si ha terminado
    void checkFinished();

   public:
    // Constructor
    SmartSprite(Texture *texture, SDL_Renderer *renderer);

    // Inicializa el objeto
    void init();

    // Actualiza la posición y comprueba si ha llegado a su destino
    void update() override;

    // Pinta el objeto en pantalla
    void render() override;

    // Obtiene el valor de la variable
    int getEnabledCounter();

    // Establece 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);

    // Obtiene el valor de la variable
    int getDestX();

    // Obtiene el valor de la variable
    int getDestY();

    // Obtiene el valor de la variable
    bool isOnDestination();

    // Obtiene el valor de la variable
    bool hasFinished();
};
