// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef DEVICE_BLUETOOTH_BLUETOOTH_CLASSIC_WIN_H_
#define DEVICE_BLUETOOTH_BLUETOOTH_CLASSIC_WIN_H_

#include "base/win/scoped_handle.h"
#include "device/bluetooth/bluetooth_export.h"
#include "device/bluetooth/bluetooth_init_win.h"

namespace device {
namespace win {

// Wraps Windows APIs used to access local Bluetooth radios and classic
// Bluetooth devices, providing an interface that can be replaced with fakes in
// tests.
class DEVICE_BLUETOOTH_EXPORT BluetoothClassicWrapper {
 public:
  BluetoothClassicWrapper();
  virtual ~BluetoothClassicWrapper();

  virtual HBLUETOOTH_RADIO_FIND FindFirstRadio(
      const BLUETOOTH_FIND_RADIO_PARAMS* params);
  virtual DWORD GetRadioInfo(PBLUETOOTH_RADIO_INFO out_radio_info);
  virtual BOOL FindRadioClose(HBLUETOOTH_RADIO_FIND handle);
  virtual BOOL IsConnectable();
  virtual HBLUETOOTH_DEVICE_FIND FindFirstDevice(
      const BLUETOOTH_DEVICE_SEARCH_PARAMS* params,
      BLUETOOTH_DEVICE_INFO* out_device_info);
  virtual BOOL FindNextDevice(HBLUETOOTH_DEVICE_FIND handle,
                              BLUETOOTH_DEVICE_INFO* out_device_info);
  virtual BOOL FindDeviceClose(HBLUETOOTH_DEVICE_FIND handle);
  virtual BOOL EnableDiscovery(BOOL is_enable);
  virtual BOOL EnableIncomingConnections(BOOL is_enable);
  virtual DWORD LastError();
  virtual bool HasHandle();

 private:
  base::win::ScopedHandle opened_radio_handle_;
};

}  // namespace win
}  // namespace device

#endif  // DEVICE_BLUETOOTH_BLUETOOTH_CLASSIC_WIN_H_
