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

#ifndef MEDIA_AUDIO_AUDIO_SYSTEM_HELPER_H_
#define MEDIA_AUDIO_AUDIO_SYSTEM_HELPER_H_

#include "media/audio/audio_system.h"
#include "media/base/media_export.h"
#include "third_party/abseil-cpp/absl/types/optional.h"

namespace media {
class AudioManager;

// Helper class wrapping AudioManager functionality. Methods to be called on
// audio thread only. Only audio system implementations are allowed to use it.
// See AudioSystem interface for method descriptions.
class MEDIA_EXPORT AudioSystemHelper {
 public:
  AudioSystemHelper(AudioManager* audio_manager);

  AudioSystemHelper(const AudioSystemHelper&) = delete;
  AudioSystemHelper& operator=(const AudioSystemHelper&) = delete;

  ~AudioSystemHelper();

  void GetInputStreamParameters(
      const std::string& device_id,
      AudioSystem::OnAudioParamsCallback on_params_cb);

  void GetOutputStreamParameters(
      const std::string& device_id,
      AudioSystem::OnAudioParamsCallback on_params_cb);

  void HasInputDevices(AudioSystem::OnBoolCallback on_has_devices_cb);

  void HasOutputDevices(AudioSystem::OnBoolCallback on_has_devices_cb);

  void GetDeviceDescriptions(
      bool for_input,
      AudioSystem::OnDeviceDescriptionsCallback on_descriptions_cp);

  void GetAssociatedOutputDeviceID(
      const std::string& input_device_id,
      AudioSystem::OnDeviceIdCallback on_device_id_cb);

  void GetInputDeviceInfo(
      const std::string& input_device_id,
      AudioSystem::OnInputDeviceInfoCallback on_input_device_info_cb);

 private:
  absl::optional<AudioParameters> ComputeInputParameters(
      const std::string& device_id);
  absl::optional<AudioParameters> ComputeOutputParameters(
      const std::string& device_id);

  AudioManager* const audio_manager_;
};

}  // namespace media

#endif  // MEDIA_AUDIO_AUDIO_SYSTEM_HELPER_H_
