#pragma once

#include <SDL3/SDL.h>

#include <string>
#include <unordered_map>

// --- Enums ---
enum class InputAction : int {  // Acciones de entrada posibles en el juego
    // Inputs de movimiento
    UP,
    DOWN,
    LEFT,
    RIGHT,

    // Inputs personalizados
    FIRE_LEFT,
    FIRE_CENTER,
    FIRE_RIGHT,
    START,

    // Service Menu
    SM_SELECT,
    SM_BACK,

    // Inputs de control
    BACK,
    EXIT,
    PAUSE,
    SERVICE,
    WINDOW_FULLSCREEN,
    WINDOW_INC_SIZE,
    WINDOW_DEC_SIZE,
    TOGGLE_VIDEO_POSTFX,
    NEXT_SHADER,
    NEXT_POSTFX_PRESET,
    TOGGLE_SUPERSAMPLING,
    TOGGLE_VIDEO_INTEGER_SCALE,
    TOGGLE_VIDEO_VSYNC,
    RESET,
    TOGGLE_AUDIO,
    CHANGE_LANG,
    SHOW_INFO,
    CONFIG,
    SWAP_CONTROLLERS,
    TOGGLE_AUTO_FIRE,

    // 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
extern const std::unordered_map<InputAction, InputAction> ACTION_TO_ACTION;        // Mapeo de acción a acción