// 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_CHROME_AUDIO_SERVICE_CLIENT_IMPL_H_
#define MEDIA_PERCEPTION_CHROME_AUDIO_SERVICE_CLIENT_IMPL_H_

#include "media_perception/chrome_audio_service_client.h"

#include <base/synchronization/lock.h>
#include <cras_client.h>
#include <cras_helpers.h>
#include <cras_types.h>
#include <cras_util.h>
#include <map>
#include <string>
#include <vector>

#include "media_perception/audio_receiver.h"

namespace mri {

// This interface uses a lock to ensure that changes to data members is
// thread-safe.
class ChromeAudioServiceClientImpl : public ChromeAudioServiceClient {
 public:
  // ChromeAudioServiceClient:
  ~ChromeAudioServiceClientImpl() override;
  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:
  // Destructs client_;
  void DestroyClient();

  std::map<std::string /* device_id */, AudioReceiver>
      device_id_to_audio_receiver_map_;

  base::Lock client_lock_;
  struct cras_client* client_;
};

}  // namespace mri

#endif  // MEDIA_PERCEPTION_CHROME_AUDIO_SERVICE_CLIENT_IMPL_H_
