#pragma once

//! @file Mix/Sound/IDevice.h
//! @brief デバイスインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Sound{

	//! @class IDevice
	//! @brief デバイスインターフェース
	class IDevice : public Mix::Reference
	{
	protected:
		//! @brief デストラクタ
		virtual ~IDevice( void ) {}

	public:
		//! @brief 再生中どうかを取得します
		//! @return 再生中の場合は True を返します
		//! @note 状態( GetStatus )が PREPARATION もしくわ PLAYING の場合のことを表します。
		virtual Boolean IsPlaying( void ) = 0;
		//! @brief 再生します
		//! @param[in] bLoop ループ再生する場合は True を指定します
		virtual void Play( Boolean bLoop = False ) = 0;
		//! @brief 停止します
		virtual void Stop( void ) = 0;

		//! @brief 一時停止します
		virtual void Suspend( void ) = 0;
		//! @brief 一時停止を解除します
		virtual void Resume( void ) = 0;

		//! @brief 破棄されているかどうかを確認します
		//! @return 破棄されている場合は True を返します
		virtual Boolean IsDisposed( void ) = 0;
		//! @brief 破棄します
		//! @note
		//! 破棄をしてしまうと、このコントローラーは使用することができなくなります。<br>
		//! ストリーミング再生をサポートするコントローラーを確実に終了させる目的で使用します。
		virtual void Dispose( void ) = 0;

		//! @brief ファイルパスを取得します
		//! @return ファイルパスを返します
		virtual const wchar_t* GetFilePath( void ) const = 0;
	};

}}
