#pragma once

#include <SDL3/SDL.h>
class Sprite;
class Texture;
struct section_t;

// Clase Logo
class Logo {
   private:
    // Objetos y punteros
    SDL_Renderer *renderer;   // El renderizador de la ventana
    Texture *texture;         // Textura con los graficos
    SDL_Event *eventHandler;  // Manejador de eventos
    Sprite *sprite;           // Sprite con la textura del logo
    section_t *section;       // Estado del bucle principal para saber si continua o se sale

    // Variables
    Uint32 ticks;       // Contador de ticks para ajustar la velocidad del programa
    Uint32 ticksSpeed;  // Velocidad a la que se repiten los bucles del programa
    int counter;        // Contador

    // Actualiza las variables del objeto
    void update();

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

    // Comprueba si ha terminado el logo
    void checkLogoEnd();

    // Comprueba las entradas
    void checkInput();

    // Dibuja el fade
    void renderFade();

   public:
    // Constructor
    Logo(SDL_Renderer *renderer, section_t *section);

    // Destructor
    ~Logo();

    Logo(const Logo &) = delete;
    Logo &operator=(const Logo &) = delete;

    // Bucle principal
    void run();

    // Ejecuta un frame
    void iterate();

    // Procesa un evento
    void handleEvent(const SDL_Event *event);
};
