#pragma once

//! Enumeration for mouse button inputs, including standard and extended buttons.
enum class MouseButton {
	//! No mouse button input.
	NONE = 0,
	//! Left mouse button.
	LEFT_MOUSE = 1,
	//! Right mouse button.
	RIGHT_MOUSE = 2,
	//! Middle mouse button (scroll wheel press).
	MIDDLE_MOUSE = 3,
	//! First extended mouse button.
	X1_MOUSE = 4,
	//! Second extended mouse button.
	X2_MOUSE = 5,
	//! Scroll wheel upward movement.
	SCROLL_UP = 6,
	//! Scroll wheel downward movement.
	SCROLL_DOWN = 7,
};

//! Enumeration for keyboard key inputs, including printable characters, function keys, and keypad keys.
enum class Keycode {
	//! No key input.
	NONE = 0,
	//! Spacebar.
	SPACE = 32,
	//! Apostrophe (').
	APOSTROPHE = 39,
	//! Comma (,).
	COMMA = 44,
	//! Minus (-).
	MINUS = 45,
	//! Period (.).
	PERIOD = 46,
	//! Slash (/).
	SLASH = 47,
	//! Digit 0.
	D0 = 48,
	//! Digit 1.
	D1 = 49,
	//! Digit 2.
	D2 = 50,
	//! Digit 3.
	D3 = 51,
	//! Digit 4.
	D4 = 52,
	//! Digit 5.
	D5 = 53,
	//! Digit 6.
	D6 = 54,
	//! Digit 7.
	D7 = 55,
	//! Digit 8.
	D8 = 56,
	//! Digit 9.
	D9 = 57,
	//! Semicolon (;).
	SEMICOLON = 59,
	//! Equal sign (=).
	EQUAL = 61,
	//! Key 'A'.
	A = 65,
	//! Key 'B'.
	B = 66,
	//! Key 'C'.
	C = 67,
	//! Key 'D'.
	D = 68,
	//! Key 'E'.
	E = 69,
	//! Key 'F'.
	F = 70,
	//! Key 'G'.
	G = 71,
	//! Key 'H'.
	H = 72,
	//! Key 'I'.
	I = 73,
	//! Key 'J'.
	J = 74,
	//! Key 'K'.
	K = 75,
	//! Key 'L'.
	L = 76,
	//! Key 'M'.
	M = 77,
	//! Key 'N'.
	N = 78,
	//! Key 'O'.
	O = 79,
	//! Key 'P'.
	P = 80,
	//! Key 'Q'.
	Q = 81,
	//! Key 'R'.
	R = 82,
	//! Key 'S'.
	S = 83,
	//! Key 'T'.
	T = 84,
	//! Key 'U'.
	U = 85,
	//! Key 'V'.
	V = 86,
	//! Key 'W'.
	W = 87,
	//! Key 'X'.
	X = 88,
	//! Key 'Y'.
	Y = 89,
	//! Key 'Z'.
	Z = 90,
	//! Left bracket ([).
	LEFT_BRACKET = 91,
	//! Backslash (\).
	BACKSLASH = 92,
	//! Right bracket (]).
	RIGHT_BRACKET = 93,
	//! Grave accent (`).
	GRAVE_ACCENT = 96,
	//! Non-US key #1.
	WORLD1 = 161,
	//! Non-US key #2.
	WORLD2 = 162,
	//! Escape key.
	ESCAPE = 256,
	//! Enter key.
	ENTER = 257,
	//! Tab key.
	TAB = 258,
	//! Backspace key.
	BACKSPACE = 259,
	//! Insert key.
	INSERT = 260,
	//! Delete key.
	DELETE = 261,
	//! Right arrow key.
	RIGHT = 262,
	//! Left arrow key.
	LEFT = 263,
	//! Down arrow key.
	DOWN = 264,
	//! Up arrow key.
	UP = 265,
	//! Page Up key.
	PAGE_UP = 266,
	//! Page Down key.
	PAGE_DOWN = 267,
	//! Home key.
	HOME = 268,
	//! End key.
	END = 269,
	//! Caps Lock key.
	CAPS_LOCK = 280,
	//! Scroll Lock key.
	SCROLL_LOCK = 281,
	//! Num Lock key.
	NUM_LOCK = 282,
	//! Print Screen key.
	PRINT_SCREEN = 283,
	//! Pause key.
	PAUSE = 284,
	/**
	 * \name Function keys (F1-F25).
	 * \{
	 */
	F1 = 290,
	F2 = 291,
	F3 = 292,
	F4 = 293,
	F5 = 294,
	F6 = 295,
	F7 = 296,
	F8 = 297,
	F9 = 298,
	F10 = 299,
	F11 = 300,
	F12 = 301,
	F13 = 302,
	F14 = 303,
	F15 = 304,
	F16 = 305,
	F17 = 306,
	F18 = 307,
	F19 = 308,
	F20 = 309,
	F21 = 310,
	F22 = 311,
	F23 = 312,
	F24 = 313,
	F25 = 314,
	/// \}
	/**
	 * \name Keypad digits and operators.
	 * \{
	 */
	KP0 = 320,
	KP1 = 321,
	KP2 = 322,
	KP3 = 323,
	KP4 = 324,
	KP5 = 325,
	KP6 = 326,
	KP7 = 327,
	KP8 = 328,
	KP9 = 329,
	KP_DECIMAL = 330,
	KP_DIVIDE = 331,
	KP_MULTIPLY = 332,
	KP_SUBTRACT = 333,
	KP_ADD = 334,
	KP_ENTER = 335,
	KP_EQUAL = 336,
	/// \}
	/**
	 * \name Modifier keys.
	 * \{
	 */
	//! Modifier keys.
	LEFT_SHIFT = 340,
	LEFT_CONTROL = 341,
	LEFT_ALT = 342,
	LEFT_SUPER = 343,
	RIGHT_SHIFT = 344,
	RIGHT_CONTROL = 345,
	RIGHT_ALT = 346,
	RIGHT_SUPER = 347,
	/// \}
	//! Menu key.
	MENU = 348,
};