// Copyright 2014 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_DISCOVERY_MANAGER_MAC_H_
#define DEVICE_BLUETOOTH_BLUETOOTH_DISCOVERY_MANAGER_MAC_H_

#include "base/macros.h"

@class IOBluetoothDevice;

namespace device {

// Class used by BluetoothAdapterMac to manage classic and LE device discovery.
// For Bluetooth Classic, this class is responsible for keeping device inquiry
// running if device discovery is initiated.
class BluetoothDiscoveryManagerMac {
 public:
  // Interface for being notified of events during a device discovery session.
  class Observer {
   public:
    // Called when |this| manager has found a device through classic device
    // inquiry in the form of an IOBluetoothDevice.
    virtual void ClassicDeviceFound(IOBluetoothDevice* device) = 0;

    // Called when device discovery is no longer running, due to either a call
    // to BluetoothDiscoveryManagerMac::StopDiscovery or an unexpected reason,
    // such as when a user disables the controller, in which case the value of
    // |unexpected| will be true.
    virtual void ClassicDiscoveryStopped(bool unexpected) = 0;

   protected:
    virtual ~Observer() {}
  };

  virtual ~BluetoothDiscoveryManagerMac();

  // Returns true, if discovery is currently being performed.
  virtual bool IsDiscovering() const = 0;

  // Initiates a discovery session. Returns true on success or if discovery
  // is already running. Returns false on failure.
  virtual bool StartDiscovery() = 0;

  // Stops a discovery session. Returns true on success or if discovery is
  // already not running. Returns false on failure.
  virtual bool StopDiscovery() = 0;

  // Creates a discovery manager for Bluetooth Classic device discovery with
  // observer |observer|. Note that the life-time of |observer| should not
  // end before that of the returned BluetoothDiscoveryManager, as that may
  // lead to use after free errors.
  static BluetoothDiscoveryManagerMac* CreateClassic(Observer* observer);

 protected:
  explicit BluetoothDiscoveryManagerMac(Observer* observer);

  // Observer interested in notifications from us.
  Observer* observer_;

 private:
  DISALLOW_COPY_AND_ASSIGN(BluetoothDiscoveryManagerMac);
};

}  // namespace device

#endif  // DEVICE_BLUETOOTH_BLUETOOTH_DISCOVERY_MANAGER_MAC_H_
