#ifndef _CINPUT_HPP_
#define _CINPUT_HPP_

/*** SDL Header Files ***/
#include <SDL.h>   

/*** Custom Header Files ***/
#include "cKeyboard.hpp"

/*** DLL Header File ***/
#include "dllExport.h"

/*** Custom Header Files ***/
#include "../UtilityEngine/cString.hpp"

using UtilityEngine::cString;

namespace InputEngine {
	/* Singleton */
	class EXPORT_FROM_MYDLL cInput
	{
	private:
		cInput();
		~cInput();

	public:
		static cInput& Inst();
		static void Delete();

		//Functions
		const bool Initialize() const;
		
		const bool Setup();
		void CleanUp();

		/* Checks all inputs */
		void CheckInputs( const SDL_Event& event );
		/* Checks all keyboards */
		void CheckKeyboards();
		/* Checks all Joysticks */
		void CheckJoysticks();

		/* Adds a keyboard to cInput interneal list to be called when CheckInputs is called */
		void AddKeyboard( InputEngine::cKeyboard* keyboard );
		/* Deletes a keyboard in cInput internal list */
		void DeletesKeyboard( const cString& label );
		/* Deletes all keyboards in cInput internal list */
		void DeleteAllKeyboards();
		/* Removes the keyboard from cInput internal list */
		void RemoveKeyboard( const cString& label );
		/* Removes all keyboards from cInput internal list. */
		void RemoveAllKeyboards();

		void DeleteAllInputs();
		void RemoveAllInputs();

		///Sets
		
		///Gets
		/* Gets return true if Input was initialized */
		const bool IsInit() const;

	private:
		std::vector<InputEngine::cKeyboard*> m_keyboards;

		SDL_Event m_event;

		static cInput* sp_inst;// = nullptr		
	};/// END CLASS DEFINITION cInput
}/// END NAMESPACE DEFINITION InputEngine
#endif/// END IFNDEF _CINPUT_HPP_