#pragma once

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

// Clase Logo
class Logo {
   public:
    Logo(SDL_Renderer *renderer, Section *section);  // Constructor
    ~Logo();                                         // Destructor

    Logo(const Logo &) = delete;
    auto operator=(const Logo &) -> Logo & = delete;

    void run();                                // Bucle principal
    void iterate();                            // Ejecuta un frame
    void handleEvent(const SDL_Event *event);  // Procesa un evento

   private:
    // Objetos y punteros
    SDL_Renderer *renderer_;    // El renderizador de la ventana
    Texture *texture_;          // Textura con los graficos
    SDL_Event *event_handler_;  // Manejador de eventos
    Sprite *sprite_;            // Sprite con la textura del logo
    Section *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 ticks_speed_;  // Velocidad a la que se repiten los bucles del programa
    int counter_;         // Contador

    void update();        // Actualiza las variables del objeto
    void render();        // Dibuja el objeto en pantalla
    void checkLogoEnd();  // Comprueba si ha terminado el logo
    void checkInput();    // Comprueba las entradas
    void renderFade();    // Dibuja el fade
};
