#pragma once

#include <string>
#include <vector>

#include "Common/CommonTypes.h"

#ifdef _WIN32
#pragma warning(disable: 4786)  //disable warning "identifier was truncated to
								//'255' characters in the browser information"
#endif

typedef struct
{
	std::string               strDeviceName;
	s32                       iMajorVersion;
	s32                       iMinorVersion;
	u32                       uiSourceCount;
	std::vector<std::string>* pvstrExtensions;
	bool                      bSelected;
} ALDEVICEINFO, *LPALDEVICEINFO;

class ALDeviceList
{
private:
	std::vector<ALDEVICEINFO> vDeviceInfo;
	s32 defaultDeviceIndex;
	s32 filterIndex;

public:
	ALDeviceList ();
	~ALDeviceList ();
	s32 GetNumDevices();
	char *GetDeviceName(s32 index);
	void GetDeviceVersion(s32 index, s32 *major, s32 *minor);
	u32 GetMaxNumSources(s32 index);
	bool IsExtensionSupported(s32 index, char *szExtName);
	s32 GetDefaultDevice();
	void FilterDevicesMinVer(s32 major, s32 minor);
	void FilterDevicesMaxVer(s32 major, s32 minor);
	void FilterDevicesExtension(char *szExtName);
	void ResetFilters();
	s32 GetFirstFilteredDevice();
	s32 GetNextFilteredDevice();

private:
	u32 GetMaxNumSources();
};