#ifndef _INPUTMANAGER_H_
#define _INPUTMANAGER_H_

#include <vector>
#include <SDL/SDL.h>
#include <map>
#include <string>

class GuiComponent;

//The InputManager takes native system input and abstracts it into InputButtons.
//GuiComponents can be registered to receive onInput() events.
namespace InputManager {
	void registerComponent(GuiComponent* comp);
	void unregisterComponent(GuiComponent* comp);

	void loadConfig();

	//enum for identifying input, regardless of configuration
	enum InputButton { UNKNOWN, UP, DOWN, PAGEUP, PAGEDOWN, LEFT, RIGHT, BUTTON1, BUTTON2, MENU, SELECT};

	void processEvent(SDL_Event* event);

	extern std::vector<GuiComponent*> inputVector;
	extern SDL_Event* lastEvent; //mostly for GuiInputConfig
	extern int deadzone;
	std::string getConfigPath();

	extern std::map<int, InputButton> joystickButtonMap;
	extern std::map<int, InputButton> joystickAxisPosMap, joystickAxisNegMap;
	extern std::map<int, int> axisState;
	extern InputButton hatState;
}

#endif