#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;
}