#pragma once

#include <SDL3/SDL.h>

#include <array>
#include <string>
#include <unordered_map>

// --- Enums ---
enum class InputAction : int {  // Acciones de entrada posibles en el juego
    // Inputs de juego (movimiento y acción)
    LEFT,    // Rotar izquierda
    RIGHT,   // Rotar derecha
    THRUST,  // Acelerar
    SHOOT,   // Disparar
    START,   // Empezar partida

    // Inputs de sistema (globales)
    WINDOW_INC_ZOOM,    // F2
    WINDOW_DEC_ZOOM,    // F1
    TOGGLE_FULLSCREEN,  // F3
    TOGGLE_VSYNC,       // F4
    EXIT,               // ESC

    // Input obligatorio
    NONE,
    SIZE,
};

// --- Variables ---
extern const std::unordered_map<InputAction, std::string> ACTION_TO_STRING;        // Mapeo de acción a string
extern const std::unordered_map<std::string, InputAction> STRING_TO_ACTION;        // Mapeo de string a acción
extern const std::unordered_map<SDL_GamepadButton, std::string> BUTTON_TO_STRING;  // Mapeo de botón a string
extern const std::unordered_map<std::string, SDL_GamepadButton> STRING_TO_BUTTON;  // Mapeo de string a botón

// --- Constantes ---
// Physical arcade buttons (excludes directional controls LEFT/RIGHT)
static constexpr std::array<InputAction, 3> ARCADE_BUTTONS = {
    InputAction::SHOOT,
    InputAction::THRUST,
    InputAction::START};
