#include "keyCodes.h"

const std::unordered_map<SDL_Keycode, Keycode> sdlToCustom = {
    { SDLK_SPACE, Space },
    { SDLK_QUOTE, Apostrophe },
    { SDLK_COMMA, Comma },
    { SDLK_MINUS, Minus },
    { SDLK_PERIOD, Period },
    { SDLK_SLASH, Slash },

    { SDLK_0, D0 },
    { SDLK_1, D1 },
    { SDLK_2, D2 },
    { SDLK_3, D3 },
    { SDLK_4, D4 },
    { SDLK_5, D5 },
    { SDLK_6, D6 },
    { SDLK_7, D7 },
    { SDLK_8, D8 },
    { SDLK_9, D9 },

    { SDLK_SEMICOLON, Semicolon },
    { SDLK_EQUALS, Equal },

    { SDLK_a, A },
    { SDLK_b, B },
    { SDLK_c, C },
    { SDLK_d, D },
    { SDLK_e, E },
    { SDLK_f, F },
    { SDLK_g, G },
    { SDLK_h, H },
    { SDLK_i, I },
    { SDLK_j, J },
    { SDLK_k, K },
    { SDLK_l, L },
    { SDLK_m, M },
    { SDLK_n, N },
    { SDLK_o, O },
    { SDLK_p, P },
    { SDLK_q, Q },
    { SDLK_r, R },
    { SDLK_s, S },
    { SDLK_t, T },
    { SDLK_u, U },
    { SDLK_v, V },
    { SDLK_w, W },
    { SDLK_x, X },
    { SDLK_y, Y },
    { SDLK_z, Z },

    { SDLK_LEFTBRACKET, LeftBracket },
    { SDLK_BACKSLASH, Backslash },
    { SDLK_RIGHTBRACKET, RightBracket },
    { SDLK_BACKQUOTE, GraveAccent },

    { SDLK_ESCAPE, Escape },
    { SDLK_RETURN, Enter },
    { SDLK_TAB, Tab },
    { SDLK_BACKSPACE, Backspace },
    { SDLK_INSERT, Insert },
    { SDLK_DELETE, Delete },
    { SDLK_RIGHT, Right },
    { SDLK_LEFT, Left },
    { SDLK_DOWN, Down },
    { SDLK_UP, Up },
    { SDLK_PAGEUP, PageUp },
    { SDLK_PAGEDOWN, PageDown },
    { SDLK_HOME, Home },
    { SDLK_END, End },

    { SDLK_CAPSLOCK, CapsLock },
    { SDLK_SCROLLLOCK, ScrollLock },
    { SDLK_NUMLOCKCLEAR, NumLock },
    { SDLK_PRINTSCREEN, PrintScreen },
    { SDLK_PAUSE, Pause },

    { SDLK_F1, F1 },
    { SDLK_F2, F2 },
    { SDLK_F3, F3 },
    { SDLK_F4, F4 },
    { SDLK_F5, F5 },
    { SDLK_F6, F6 },
    { SDLK_F7, F7 },
    { SDLK_F8, F8 },
    { SDLK_F9, F9 },
    { SDLK_F10, F10 },
    { SDLK_F11, F11 },
    { SDLK_F12, F12 },
    { SDLK_F13, F13 },
    { SDLK_F14, F14 },
    { SDLK_F15, F15 },
    { SDLK_F16, F16 },
    { SDLK_F17, F17 },
    { SDLK_F18, F18 },
    { SDLK_F19, F19 },
    { SDLK_F20, F20 },
    { SDLK_F21, F21 },
    { SDLK_F22, F22 },
    { SDLK_F23, F23 },
    { SDLK_F24, F24 },

    { SDLK_KP_0, KP0 },
    { SDLK_KP_1, KP1 },
    { SDLK_KP_2, KP2 },
    { SDLK_KP_3, KP3 },
    { SDLK_KP_4, KP4 },
    { SDLK_KP_5, KP5 },
    { SDLK_KP_6, KP6 },
    { SDLK_KP_7, KP7 },
    { SDLK_KP_8, KP8 },
    { SDLK_KP_9, KP9 },

    { SDLK_KP_DECIMAL, KPDecimal },
    { SDLK_KP_DIVIDE, KPDivide },
    { SDLK_KP_MULTIPLY, KPMultiply },
    { SDLK_KP_MINUS, KPSubtract },
    { SDLK_KP_PLUS, KPAdd },
    { SDLK_KP_ENTER, KPEnter },
    { SDLK_KP_EQUALS, KPEqual },

    { SDLK_LSHIFT, LeftShift },
    { SDLK_LCTRL, LeftControl },
    { SDLK_LALT, LeftAlt },
    { SDLK_LGUI, LeftSuper },

    { SDLK_RSHIFT, RightShift },
    { SDLK_RCTRL, RightControl },
    { SDLK_RALT, RightAlt },
    { SDLK_RGUI, RightSuper },

    { SDLK_MENU, Menu }
};
Keycode getCustomKey(SDL_Keycode sdlKey) {
    auto it = sdlToCustom.find(sdlKey);
    if (it != sdlToCustom.end()) {
        return it->second;
    }
    return 0;
}