// Copyright 2017 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.

#include "device/bluetooth/discovery_session.h"

#include "base/bind_helpers.h"
#include "base/callback_helpers.h"

namespace bluetooth {
DiscoverySession::DiscoverySession(
    std::unique_ptr<device::BluetoothDiscoverySession> session)
    : discovery_session_(std::move(session)), weak_ptr_factory_(this) {}

DiscoverySession::~DiscoverySession() = default;

void DiscoverySession::IsActive(IsActiveCallback callback) {
  std::move(callback).Run(discovery_session_->IsActive());
}

void DiscoverySession::Stop(StopCallback callback) {
  auto copyable_callback = base::AdaptCallbackForRepeating(std::move(callback));
  discovery_session_->Stop(
      base::Bind(&DiscoverySession::OnStop, weak_ptr_factory_.GetWeakPtr(),
                 copyable_callback),
      base::Bind(&DiscoverySession::OnStopError, weak_ptr_factory_.GetWeakPtr(),
                 copyable_callback));
}

void DiscoverySession::OnStop(StopCallback callback) {
  std::move(callback).Run(true /* success */);
}

void DiscoverySession::OnStopError(StopCallback callback) {
  std::move(callback).Run(false /* success */);
}

}  // namespace bluetooth
