// Copyright 2019 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_CAPTURE_VIDEO_CHROMEOS_CAMERA_APP_DEVICE_PROVIDER_IMPL_H_
#define MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_APP_DEVICE_PROVIDER_IMPL_H_

#include <string>

#include "media/capture/capture_export.h"
#include "media/capture/video/chromeos/mojom/camera_app.mojom.h"
#include "mojo/public/cpp/bindings/receiver_set.h"

namespace media {

class CAPTURE_EXPORT CameraAppDeviceProviderImpl
    : public cros::mojom::CameraAppDeviceProvider {
 public:
  using WithRealIdCallback =
      base::OnceCallback<void(const absl::optional<std::string>&)>;
  using DeviceIdMappingCallback =
      base::RepeatingCallback<void(const std::string&, WithRealIdCallback)>;

  CameraAppDeviceProviderImpl(
      mojo::PendingRemote<cros::mojom::CameraAppDeviceBridge> bridge,
      DeviceIdMappingCallback mapping_callback);

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

  ~CameraAppDeviceProviderImpl() override;
  void Bind(
      mojo::PendingReceiver<cros::mojom::CameraAppDeviceProvider> receiver);

  // cros::mojom::CameraAppDeviceProvider implementations.
  void GetCameraAppDevice(const std::string& source_id,
                          GetCameraAppDeviceCallback callback) override;
  void IsSupported(IsSupportedCallback callback) override;
  void SetMultipleStreamsEnabled(
      const std::string& device_id,
      bool enabled,
      SetMultipleStreamsEnabledCallback callback) override;

 private:
  void GetCameraAppDeviceWithDeviceId(
      GetCameraAppDeviceCallback callback,
      const absl::optional<std::string>& device_id);

  void SetMultipleStreamsEnabledWithDeviceId(
      bool enable,
      SetMultipleStreamsEnabledCallback callback,
      const absl::optional<std::string>& device_id);

  mojo::Remote<cros::mojom::CameraAppDeviceBridge> bridge_;

  DeviceIdMappingCallback mapping_callback_;

  mojo::Receiver<cros::mojom::CameraAppDeviceProvider> receiver_{this};

  base::WeakPtrFactory<CameraAppDeviceProviderImpl> weak_ptr_factory_;
};

}  // namespace media

#endif  // MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_APP_DEVICE_PROVIDER_IMPL_H_
