#ifndef INPUT_H
#define INPUT_H

#include "tier0/platform.h"

//-----------------------------------------------------------------------------
// Keys include mouse buttons and gamepad buttons as well.
// KEY_NONE and AXIS_NONE are garbage, so don't rely on them
//-----------------------------------------------------------------------------

enum EKeyEventType
{
	KEY_EVENT_TYPE_DOWN,
	KEY_EVENT_TYPE_UP,
};

enum EInputKey
{
	KEY_NONE = 0,
	KEY_ESCAPE,
	KEY_TAB,
	KEY_TILDE,
	KEY_CAPSLOCK,
	KEY_CONTROL,
	KEY_SHIFT,
	KEY_WIN,
	KEY_ALT,
	KEY_SPACE,

	KEY_BACKSPACE,
	KEY_LBRACKET,
	KEY_RBRACKET,
	KEY_BACKSLASH,
	KEY_SEMICOLON,
	KEY_APOSTROPHE,
	KEY_SLASH,
	KEY_ENTER,

	KEY_F1,
	KEY_F2,
	KEY_F3,
	KEY_F4,
	KEY_F5,
	KEY_F6,
	KEY_F7,
	KEY_F8,
	KEY_F9,
	KEY_F10,
	KEY_F11,
	KEY_F12,

	KEY_1,
	KEY_2,
	KEY_3,
	KEY_4,
	KEY_5,
	KEY_6,
	KEY_7,
	KEY_8,
	KEY_9,
	KEY_0,

	KEY_A,
	KEY_B,
	KEY_C,
	KEY_D,
	KEY_E,
	KEY_F,
	KEY_G,
	KEY_H,
	KEY_I,
	KEY_J,
	KEY_K,
	KEY_L,
	KEY_M,
	KEY_N,
	KEY_O,
	KEY_P,
	KEY_Q,
	KEY_R,
	KEY_S,
	KEY_T,
	KEY_U,
	KEY_V,
	KEY_W,
	KEY_X,
	KEY_Y,
	KEY_Z,
	KEY_MAX,
	KEY_NUM_KEYS = KEY_MAX - 1,
};

enum EInputAxis
{
	AXIS_NONE,
	AXIS_MOUSE_X,
	AXIS_MOUSE_Y,
	AXIS_MOUSE_SCROLL,
	AXIS_MAX,
	AXIS_NUM_AXIS = AXIS_MAX - 1,
};

enum EMouseMode
{
	MOUSE_MODE_GAME,
	MOUSE_MODE_MENU,F
};

interface IInput
{
public:
	static void Init( void );
	static void KeyEvent( EInputKey key, EKeyEventType event );
	static void AxisEvent( EInputAxis axis, float fValue );
	static void SetMouseMode( EMouseMode mode );
	static void Frame( void );
	static void Deinit( void );
};

extern float g_fAxisValues[AXIS_NUM_AXIS];

#endif
