#ifndef ANKI_INPUT_KEY_CODES_H
#define ANKI_INPUT_KEY_CODES_H

namespace anki {

/// Keyboard scancodes taken from SDL 
enum KeyCode
{
	KC_UNKNOWN = 0,

	KC_RETURN = '\r',
	KC_ESCAPE = '\033',
	KC_BACKSPACE = '\b',
	KC_TAB = '\t',
	KC_SPACE = ' ',
	KC_EXCLAIM = '!',
	KC_QUOTEDBL = '"',
	KC_HASH = '#',
	KC_PERCENT = '%',
	KC_DOLLAR = '$',
	KC_AMPERSAND = '&',
	KC_QUOTE = '\'',
	KC_LEFTPAREN = '(',
	KC_RIGHTPAREN = ')',
	KC_ASTERISK = '*',
	KC_PLUS = '+',
	KC_COMMA = ',',
	KC_MINUS = '-',
	KC_PERIOD = '.',
	KC_SLASH = '/',
	KC_0 = '0',
	KC_1 = '1',
	KC_2 = '2',
	KC_3 = '3',
	KC_4 = '4',
	KC_5 = '5',
	KC_6 = '6',
	KC_7 = '7',
	KC_8 = '8',
	KC_9 = '9',
	KC_COLON = ':',
	KC_SEMICOLON = ';',
	KC_LESS = '<',
	KC_EQUALS = '=',
	KC_GREATER = '>',
	KC_QUESTION = '?',
	KC_AT = '@',

	KC_LEFTBRACKET = '[',
	KC_BACKSLASH = '\\',
	KC_RIGHTBRACKET = ']',
	KC_CARET = '^',
	KC_UNDERSCORE = '_',
	KC_BACKQUOTE = '`',
	KC_A = 'a',
	KC_B = 'b',
	KC_C = 'c',
	KC_D = 'd',
	KC_E = 'e',
	KC_F = 'f',
	KC_G = 'g',
	KC_H = 'h',
	KC_I = 'i',
	KC_J = 'j',
	KC_K = 'k',
	KC_L = 'l',
	KC_M = 'm',
	KC_N = 'n',
	KC_O = 'o',
	KC_P = 'p',
	KC_Q = 'q',
	KC_R = 'r',
	KC_S = 's',
	KC_T = 't',
	KC_U = 'u',
	KC_V = 'v',
	KC_W = 'w',
	KC_X = 'x',
	KC_Y = 'y',
	KC_Z = 'z',

	KC_CAPSLOCK,

	KC_F1,
	KC_F2,
	KC_F3,
	KC_F4,
	KC_F5,
	KC_F6,
	KC_F7,
	KC_F8,
	KC_F9,
	KC_F10,
	KC_F11,
	KC_F12,

	KC_PRINTSCREEN,
	KC_SCROLLLOCK,
	KC_PAUSE,
	KC_INSERT,
	KC_HOME,
	KC_PAGEUP,
	KC_DELETE = '\177',
	KC_END,
	KC_PAGEDOWN,
	KC_RIGHT,
	KC_LEFT,
	KC_DOWN,
	KC_UP,

	KC_NUMLOCKCLEAR,
	KC_KP_DIVIDE,
	KC_KP_MULTIPLY,
	KC_KP_MINUS,
	KC_KP_PLUS,
	KC_KP_ENTER,
	KC_KP_1,
	KC_KP_2,
	KC_KP_3,
	KC_KP_4,
	KC_KP_5,
	KC_KP_6,
	KC_KP_7,
	KC_KP_8,
	KC_KP_9,
	KC_KP_0,
	KC_KP_PERIOD,

	KC_APPLICATION,
	KC_POWER,
	KC_KP_EQUALS,
	KC_F13,
	KC_F14,
	KC_F15,
	KC_F16,
	KC_F17,
	KC_F18,
	KC_F19,
	KC_F20,
	KC_F21,
	KC_F22,
	KC_F23,
	KC_F24,
	KC_EXECUTE,
	KC_HELP,
	KC_MENU,
	KC_SELECT,
	KC_STOP,
	KC_AGAIN,
	KC_UNDO,
	KC_CUT,
	KC_COPY,
	KC_PASTE,
	KC_FIND,
	KC_MUTE,
	KC_VOLUMEUP,
	KC_VOLUMEDOWN,
	KC_KP_COMMA,
	KC_KP_EQUALSAS400,

	KC_ALTERASE,
	KC_SYSREQ,
	KC_CANCEL,
	KC_CLEAR,
	KC_PRIOR,
	KC_RETURN2,
	KC_SEPARATOR,
	KC_OUT,
	KC_OPER,
	KC_CLEARAGAIN,
	KC_CRSEL,
	KC_EXSEL,

	KC_KP_00,
	KC_KP_000,
	KC_THOUSANDSSEPARATOR,
	KC_DECIMALSEPARATOR,
	KC_CURRENCYUNIT,
	KC_CURRENCYSUBUNIT,
	KC_KP_LEFTPAREN,
	KC_KP_RIGHTPAREN,
	KC_KP_LEFTBRACE,
	KC_KP_RIGHTBRACE,
	KC_KP_TAB,
	KC_KP_BACKSPACE,
	KC_KP_A,
	KC_KP_B,
	KC_KP_C,
	KC_KP_D,
	KC_KP_E,
	KC_KP_F,
	KC_KP_XOR,
	KC_KP_POWER,
	KC_KP_PERCENT,
	KC_KP_LESS,
	KC_KP_GREATER,
	KC_KP_AMPERSAND,
	KC_KP_DBLAMPERSAND,
	KC_KP_VERTICALBAR,
	KC_KP_DBLVERTICALBAR,
	KC_KP_COLON,
	KC_KP_HASH,
	KC_KP_SPACE,
	KC_KP_AT,
	KC_KP_EXCLAM,
	KC_KP_MEMSTORE,
	KC_KP_MEMRECALL,
	KC_KP_MEMCLEAR,
	KC_KP_MEMADD,
	KC_KP_MEMSUBTRACT,
	KC_KP_MEMMULTIPLY,
	KC_KP_MEMDIVIDE,
	KC_KP_PLUSMINUS,
	KC_KP_CLEAR,
	KC_KP_CLEARENTRY,
	KC_KP_BINARY,
	KC_KP_OCTAL,
	KC_KP_DECIMAL,
	KC_KP_HEXADECIMAL,

	KC_LCTRL,
	KC_LSHIFT,
	KC_LALT,
	KC_LGUI,
	KC_RCTRL,
	KC_RSHIFT,
	KC_RALT,
	KC_RGUI,

	KC_MODE,

	KC_AUDIONEXT,
	KC_AUDIOPREV,
	KC_AUDIOSTOP,
	KC_AUDIOPLAY,
	KC_AUDIOMUTE,
	KC_MEDIASELECT,
	KC_WWW,
	KC_MAIL,
	KC_CALCULATOR,
	KC_COMPUTER,
	KC_AC_SEARCH,
	KC_AC_HOME,
	KC_AC_BACK,
	KC_AC_FORWARD,
	KC_AC_STOP,
	KC_AC_REFRESH,
	KC_AC_BOOKMARKS,

	KC_BRIGHTNESSDOWN,
	KC_BRIGHTNESSUP,
	KC_DISPLAYSWITCH,
	KC_KBDILLUMTOGGLE,
	KC_KBDILLUMDOWN,
	KC_KBDILLUMUP,
	KC_EJECT,
	KC_SLEEP,	

	KC_COUNT
};

} // end namespace anki

#endif
