#ifndef _HEADER_INPUT_ENUMS
#define _HEADER_INPUT_ENUMS

namespace Input
{

	// Keyboard input keys
	enum InputKey : unsigned char
	{
		IK_ESCAPE = 0x01,
		IK_1 = 0x02,
		IK_2 = 0x03,
		IK_3 = 0x04,
		IK_4 = 0x05,
		IK_5 = 0x06,
		IK_6 = 0x07,
		IK_7 = 0x08,
		IK_8 = 0x09,
		IK_9 = 0x0A,
		IK_0 = 0x0B,
		IK_MINUS = 0x0C,
		IK_EQUALS = 0x0D,
		IK_BACK = 0x0E,
		IK_TAB = 0x0F,
		IK_Q = 0x10,
		IK_W = 0x11,
		IK_E = 0x12,
		IK_R = 0x13,
		IK_T = 0x14,
		IK_Y = 0x15,
		IK_U = 0x16,
		IK_I = 0x17,
		IK_O = 0x18,
		IK_P = 0x19,
		IK_LBRACKET = 0x1A,
		IK_RBRACKET = 0x1B,
		IK_RETURN = 0x1C,
		IK_LCONTROL = 0x1D,
		IK_A = 0x1E,
		IK_S = 0x1F,
		IK_D = 0x20,
		IK_F = 0x21,
		IK_G = 0x22,
		IK_H = 0x23,
		IK_J = 0x24,
		IK_K = 0x25,
		IK_L = 0x26,
		IK_SEMICOLON = 0x27,
		IK_APOSTROPHE = 0x28,
		IK_GRAVE = 0x29,
		IK_LSHIFT = 0x2A,
		IK_BACKSLASH = 0x2B,
		IK_Z = 0x2C,
		IK_X = 0x2D,
		IK_C = 0x2E,
		IK_V = 0x2F,
		IK_B = 0x30,
		IK_N = 0x31,
		IK_M = 0x32,
		IK_COMMA = 0x33,
		IK_PERIOD = 0x34,
		IK_SLASH = 0x35,
		IK_RSHIFT = 0x36,
		IK_MULTIPLY = 0x37,
		IK_LMENU = 0x38,
		IK_SPACE = 0x39,
		IK_CAPITAL = 0x3A,
		IK_F1 = 0x3B,
		IK_F2 = 0x3C,
		IK_F3 = 0x3D,
		IK_F4 = 0x3E,
		IK_F5 = 0x3F,
		IK_F6 = 0x40,
		IK_F7 = 0x41,
		IK_F8 = 0x42,
		IK_F9 = 0x43,
		IK_F10 = 0x44,
		IK_NUMLOCK = 0x45,
		IK_SCROLL = 0x46,
		IK_NUMPAD7 = 0x47,
		IK_NUMPAD8 = 0x48,
		IK_NUMPAD9 = 0x49,
		IK_SUBTRACT = 0x4A,
		IK_NUMPAD4 = 0x4B,
		IK_NUMPAD5 = 0x4C,
		IK_NUMPAD6 = 0x4D,
		IK_ADD = 0x4E,
		IK_NUMPAD1 = 0x4F,
		IK_NUMPAD2 = 0x50,
		IK_NUMPAD3 = 0x51,
		IK_NUMPAD0 = 0x52,
		IK_DECIMAL = 0x53,
		IK_OEM_102 = 0x56,
		IK_F11 = 0x57,
		IK_F12 = 0x58,
		IK_F13 = 0x64,
		IK_F14 = 0x65,
		IK_F15 = 0x66,
		IK_KANA = 0x70,
		IK_ABNT_C1 = 0x73,
		IK_CONVERT = 0x79,
		IK_NOCONVERT = 0x7B,
		IK_YEN = 0x7D,
		IK_ABNT_C2 = 0x7E,
		IK_NUMPADEQUALS = 0x8D,
		IK_PREVTRACK = 0x90,
		IK_AT = 0x91,
		IK_COLON = 0x92,
		IK_UNDERLINE = 0x93,
		IK_KANJI = 0x94,
		IK_STOP = 0x95,
		IK_AX = 0x96,
		IK_UNLABELED = 0x97,
		IK_NEXTTRACK = 0x99,
		IK_NUMPADENTER = 0x9C,
		IK_RCONTROL = 0x9D,
		IK_MUTE = 0xA0,
		IK_CALCULATOR = 0xA1,
		IK_PLAYPAUSE = 0xA2,
		IK_MEDIASTOP = 0xA4,
		IK_VOLUMEDOWN = 0xAE,
		IK_VOLUMEUP = 0xB0,
		IK_WEBHOME = 0xB2,
		IK_NUMPADCOMMA = 0xB3,
		IK_DIVIDE = 0xB5,
		IK_SYSRQ = 0xB7,
		IK_RMENU = 0xB8,
		IK_PAUSE = 0xC5,
		IK_HOME = 0xC7,
		IK_UP = 0xC8,
		IK_PRIOR = 0xC9,
		IK_LEFT = 0xCB,
		IK_RIGHT = 0xCD,
		IK_END = 0xCF,
		IK_DOWN = 0xD0,
		IK_NEXT = 0xD1,
		IK_INSERT = 0xD2,
		IK_DELETE = 0xD3,
		IK_LWIN = 0xDB,
		IK_RWIN = 0xDC,
		IK_APPS = 0xDD,
		IK_POWER = 0xDE,
		IK_SLEEP = 0xDF,
		IK_WAKE = 0xE3,
		IK_WEBSEARCH = 0xE5,
		IK_WEBFAVORITES = 0xE6,
		IK_WEBREFRESH = 0xE7,
		IK_WEBSTOP = 0xE8,
		IK_WEBFORWARD = 0xE9,
		IK_WEBBACK = 0xEA,
		IK_MYCOMPUTER = 0xEB,
		IK_MAIL = 0xEC,
		IK_MEDIASELECT = 0xED,
		IK_BACKSPACE = IK_BACK,
		IK_NUMPADSTAR = IK_MULTIPLY,
		IK_LALT = IK_LMENU,
		IK_CAPSLOCK = IK_CAPITAL,
		IK_NUMPADMINUS = IK_SUBTRACT,
		IK_NUMPADPLUS = IK_ADD,
		IK_NUMPADPERIOD = IK_DECIMAL,
		IK_NUMPADSLASH = IK_DIVIDE,
		IK_RALT = IK_RMENU,
		IK_UPARROW = IK_UP,
		IK_PGUP = IK_PRIOR,
		IK_LEFTARROW = IK_LEFT,
		IK_RIGHTARROW = IK_RIGHT,
		IK_DOWNARROW = IK_DOWN,
		IK_PGDN = IK_NEXT,
	};

	// Joystick axis
	enum InputJoystickAxis
	{
		IJA_LSTICK,
		IJA_RSTICK,
		IJA_LRTRIGGER,
		IJA_DPAD,
	};

	// Joystick buttons
	enum InputJoystickButton : unsigned char
	{
		IJB_BUTTON0,
		IJB_BUTTON1,
		IJB_BUTTON2,
		IJB_BUTTON3,
		IJB_BUTTON4,
		IJB_BUTTON5,
		IJB_BUTTON6,
		IJB_BUTTON7,
		IJB_BUTTON8,
		IJB_BUTTON9,
		IJB_BUTTON10,
		IJB_BUTTON11,
		IJB_BUTTON12,
		IJB_BUTTON13,
		IJB_BUTTON14,
		IJB_BUTTON15,
		IJB_BUTTON16,
		IJB_BUTTON17,
		IJB_BUTTON18,
		IJB_BUTTON19,
		IJB_BUTTON20,
		IJB_BUTTON21,
		IJB_BUTTON22,
		IJB_BUTTON23,
		IJB_BUTTON24,
		IJB_BUTTON25,
		IJB_BUTTON26,
		IJB_BUTTON27,
		IJB_BUTTON28,
		IJB_BUTTON29,
		IJB_BUTTON30,
		IJB_BUTTON31,
		IJB_DPADUP = 200,
		IJB_DPADRIGHT = 201,
		IJB_DPADLEFT = 202,
		IJB_DPADDOWN = 203,
		// Xbox 360 buttons
		IJB_XBOXA = IJB_BUTTON0,
		IJB_XBOXB = IJB_BUTTON1,
		IJB_XBOXX = IJB_BUTTON2,
		IJB_XBOXY = IJB_BUTTON3,
		IJB_XBOXLB = IJB_BUTTON4,
		IJB_XBOXRB = IJB_BUTTON5,
		IJB_XBOXBACK = IJB_BUTTON6,
		IJB_XBOXSTART = IJB_BUTTON7,
		IJB_XBOXLEFTSTICK = IJB_BUTTON8,
		IJB_XBOXRIGHTSTICK = IJB_BUTTON9,
		IJB_XBOXDPADUP = IJB_DPADUP,
		IJB_XBOXDPADRIGHT = IJB_DPADRIGHT,
		IJB_XBOXDPADLEFT = IJB_DPADLEFT,
		IJB_XBOXDPADDOWN = IJB_DPADDOWN,
		IJB_XBOXLT = 204,
		IJB_XBOXRT = 205,
		// Dualshock 4 buttons
		IJB_DS4SQUARE = IJB_BUTTON0,
		IJB_DS4CROSS = IJB_BUTTON1,
		IJB_DS4CIRCLE = IJB_BUTTON2,
		IJB_DS4TRIANGLE = IJB_BUTTON3,
		IJB_DS4L1 = IJB_BUTTON4,
		IJB_DS4R1 = IJB_BUTTON5,
		IJB_DS4L2 = IJB_BUTTON6,
		IJB_DS4R2 = IJB_BUTTON7,
		IJB_DS4SHARE = IJB_BUTTON8,
		IJB_DS4OPTIONS = IJB_BUTTON9,
		IJB_DS4LEFTSTICK = IJB_BUTTON10,
		IJB_DS4RIGHTSTICK = IJB_BUTTON11,
		IJB_DS4PLAYSTATION = IJB_BUTTON12,
		IJB_DS4TOUCH = IJB_BUTTON13,
		IJB_DS4DPADUP = IJB_DPADUP,
		IJB_DS4DPADRIGHT = IJB_DPADRIGHT,
		IJB_DS4DPADLEFT = IJB_DPADLEFT,
		IJB_DS4DPADDOWN = IJB_DPADDOWN,
	};

	enum InputJoystickPhysical : unsigned char
	{
		IJP_FACEDOWN = 0,
		IJP_FACERIGHT = 1,
		IJP_FACELEFT = 2,
		IJP_FACEUP = 3,
		IJP_DPADDOWN = 4,
		IJP_DPADRIGHT = 5,
		IJP_DPADLEFT = 6,
		IJP_DPADUP = 7,
		IJP_SHOULDERRIGHT = 8,
		IJP_SHOULDERLEFT = 9,
		IJP_TRIGGERRIGHT = 10,
		IJP_TRIGGERLEFT = 11,
		IJP_START = 12,
		IJP_SELECT = 13,
		IJP_STICKLEFT = 14,
		IJP_STICKRIGHT = 15,
	};

	enum InputManagerEvent : unsigned char
	{
		IME_PRESSED		= 0,
		IME_RELEASED	= 1,
		IME_REPEAT		= 2,
	};
}

#endif
