#pragma once

#include "ehs/Array.h"
#include "ehs/Serializer.h"
#include "InputHandler.h"

namespace ehs
{
	class EHS_LIB_IO Input
	{
	private:
		Array<InputHandler*> handlers;
		bool initalized;

	public:
		~Input();

		Input();

		Input(Input&& input) noexcept;

		Input(const Input& input);

		Input& operator=(Input&& input) noexcept;

		Input& operator=(const Input& input);

		void Initialize();

		void Release();

		void Poll();

		bool HasHandler(const UInt_64 hashId) const;

		bool HasHandler(const Str_8& id) const;

		bool AddHandler(InputHandler* handler);

		const InputHandler* GetHandler(const UInt_64 hashId) const;

		const InputHandler* GetHandler(const Str_8& id) const;

		bool IsInitialized() const;
	};
}