#pragma once

//! @file Mix/HID/IManager.h
//! @brief インプットマネージャインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace HID{

	//! @class IManager
	//! @brief インプットマネージャインターフェース
	class IManager : public Mix::Reference
	{
	protected:
		//! @brief デストラクタ
		virtual ~IManager( void ){}

	public:
		//! @brief キーボードを取得します
		//! @param[out] ppKeyboard 取得したキーボードを渡す Mix::HID::IKeyboard インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean GetKeyboard( Mix::HID::IKeyboard** ppKeyboard ) = 0;

		//! @brief マウスを取得します
		//! @param[out] ppMouse 取得したマウスを渡す Mix::HID::IMouse インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean GetMouse( Mix::HID::IMouse** ppMouse ) = 0;

		//! @brief ゲームパッドを取得します
		//! @param[in] port ゲームパッドのポート( Mix::HID::GAMEPAD_PORT )
		//! @param[out] ppGamepad 取得したゲームパッドを表す Mix::HID::IGamepad インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean GetGamepad( UInt32 port, Mix::HID::IGamepad** ppGamepad ) = 0;
		//! @brief 利用可能なゲームパッドを取得します
		//! @param[in] api 優先するゲームパッドのAPI
		//! @param[out] ppGamepad 取得したゲームパッドを表す Mix::HID::IGamepad インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		//! @note api に Mix::HID::GAMEPAD_UNKNOWN を指定した場合は XInput を優先します
		virtual Boolean FindGamepad( Mix::HID::GAMEPAD_API api, Mix::HID::IGamepad** ppGamepad ) = 0;
	};

}}
