// 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_CRAS_CLIENT_WRAPPER_H_
#define MEDIA_PERCEPTION_CRAS_CLIENT_WRAPPER_H_

#include <alsa/asoundlib.h>
#include <functional>
#include <memory>
#include <string>
#include <utility>

namespace mri {

// This class provides a generic base class for encapsulating methods used for
// interacting with Chrome audio service on ChromeOS devices.
class CrasClientWrapper {
 public:
  // Handler for incoming audio samples.
  using AudioInputHandler =
      std::function<void(const uint8_t *samples, int size)>;

  // Pure virtuals for the interfaces that need to be available in the
  // implementation.
  virtual ~CrasClientWrapper() {}

  // Connects to CrAS server.
  virtual bool Connect() = 0;

  // Disconnects from CrAS server.
  virtual void Disconnect() = 0;

  // Checks if it has been connected to CrAS server.
  virtual bool IsConnected() const = 0;

  // Starts audio capture. Return value indicates success or failure.
  virtual bool StartAudioCapture() = 0;

  // Stops audio capture.
  virtual void StopAudioCapture() = 0;

  // Checks if audio capture has been started.
  virtual bool HasAudioCaptureStarted() const = 0;

  // Sets parameters for audio capture. Return value indicates success or
  // failure.
  virtual bool SetParams(const std::string &device_name,
                         unsigned int num_channels, unsigned int block_size,
                         unsigned int frame_rate, snd_pcm_format_t format) = 0;

  // Sets handler for processing audio samples.
  void SetAudioInputHandler(AudioInputHandler handler) {
    audio_input_handler_ = std::move(handler);
  }

 protected:
  // Handler for processing audio samples.
  AudioInputHandler audio_input_handler_;
};

}  // namespace mri

#endif  // MEDIA_PERCEPTION_CRAS_CLIENT_WRAPPER_H_
