#pragma once

#include <SDL3/SDL_events.h>  // for SDL_Event

// Forward declaration para evitar dependencia circular
class Engine;

/**
 * @class InputHandler
 * @brief Procesa eventos de entrada (teclado, ratón, ventana) y los traduce a acciones del Engine
 *
 * Responsabilidad única: Manejo de input SDL y traducción a comandos de alto nivel
 *
 * Características:
 * - Procesa todos los eventos SDL (teclado, ratón, quit)
 * - Traduce inputs a llamadas de métodos del Engine
 * - Mantiene el Engine desacoplado de la lógica de input SDL
 * - Soporta todos los controles del proyecto (gravedad, figuras, temas, zoom, fullscreen)
 */
class InputHandler {
    public:
        /**
         * @brief Procesa todos los eventos SDL pendientes
         * @param engine Referencia al engine para ejecutar acciones
         * @return true si se debe salir de la aplicación (ESC o cerrar ventana), false en caso contrario
         */
        bool processEvents(Engine& engine);

    private:
        // Sin estado interno por ahora - el InputHandler es stateless
        // Todos los estados se delegan al Engine
};
