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

#include "diagnostics/common/system/bluetooth_client.h"

#include <base/logging.h>
#include <dbus/bluetooth/dbus-constants.h>

namespace diagnostics {

BluetoothClient::AdapterProperties::AdapterProperties(
    dbus::ObjectProxy* object_proxy,
    const dbus::PropertySet::PropertyChangedCallback& callback)
    : dbus::PropertySet(object_proxy,
                        bluetooth_adapter::kBluetoothAdapterInterface,
                        callback) {
  RegisterProperty(bluetooth_adapter::kNameProperty, &name);
  RegisterProperty(bluetooth_adapter::kAddressProperty, &address);
  RegisterProperty(bluetooth_adapter::kPoweredProperty, &powered);
}

BluetoothClient::AdapterProperties::~AdapterProperties() = default;

BluetoothClient::DeviceProperties::DeviceProperties(
    dbus::ObjectProxy* object_proxy,
    const dbus::PropertySet::PropertyChangedCallback& callback)
    : dbus::PropertySet(
          object_proxy, bluetooth_device::kBluetoothDeviceInterface, callback) {
  RegisterProperty(bluetooth_device::kNameProperty, &name);
  RegisterProperty(bluetooth_device::kAddressProperty, &address);
  RegisterProperty(bluetooth_device::kConnectedProperty, &connected);
  RegisterProperty(bluetooth_device::kAdapterProperty, &adapter);
}

BluetoothClient::DeviceProperties::~DeviceProperties() = default;

BluetoothClient::BluetoothClient() = default;

BluetoothClient::~BluetoothClient() = default;

void BluetoothClient::AddObserver(Observer* observer) {
  DCHECK(observer);
  observers_.AddObserver(observer);
}

void BluetoothClient::RemoveObserver(Observer* observer) {
  DCHECK(observer);
  observers_.RemoveObserver(observer);
}

}  // namespace diagnostics
