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

#ifndef MEDIA_PERCEPTION_FAKE_CHROME_AUDIO_SERVICE_CLIENT_H_
#define MEDIA_PERCEPTION_FAKE_CHROME_AUDIO_SERVICE_CLIENT_H_

#include "media_perception/chrome_audio_service_client.h"

#include <string>
#include <vector>

#include "base/macros.h"

namespace mri {

class FakeChromeAudioServiceClient : public ChromeAudioServiceClient {
 public:
  FakeChromeAudioServiceClient() = default;
  FakeChromeAudioServiceClient(const FakeChromeAudioServiceClient&) = delete;
  FakeChromeAudioServiceClient& operator=(const FakeChromeAudioServiceClient&) =
      delete;

  void SetDevicesForGetInputDevices(std::vector<SerializedAudioDevice> devices);

  // ChromeAudioServiceClient:
  bool Connect() override;
  bool IsConnected() override;
  std::vector<SerializedAudioDevice> GetInputDevices() override;
  bool IsAudioCaptureStartedForDevice(
      const std::string& device_id,
      SerializedAudioStreamParams* capture_format) override;
  int AddFrameHandler(const std::string& device_id,
                      const SerializedAudioStreamParams& capture_format,
                      AudioFrameHandler handler) override;
  bool RemoveFrameHandler(const std::string& device_id,
                          int frame_handler_id) override;

 private:
  std::vector<SerializedAudioDevice> devices_;
  bool connected_;
};

}  // namespace mri

#endif  // MEDIA_PERCEPTION_FAKE_CHROME_AUDIO_SERVICE_CLIENT_H_
