// Copyright 2009 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#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();
};
