// Copyright 2020 The Fuchsia 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 SRC_CAMERA_LIB_FAKE_STREAM_FAKE_STREAM_H_
#define SRC_CAMERA_LIB_FAKE_STREAM_FAKE_STREAM_H_

#include <fuchsia/camera3/cpp/fidl.h>
#include <lib/fpromise/result.h>

namespace camera {

// This class provides a mechanism for simulating streams.
class FakeStream {
 public:
  virtual ~FakeStream() = default;

  // Create a fake stream with the given properties.
  static fpromise::result<std::unique_ptr<FakeStream>, zx_status_t> Create(
      fuchsia::camera3::StreamProperties properties,
      fit::function<void(fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken>)>
          on_set_buffer_collection);

  // Returns a request handler for the Stream interface.
  virtual fidl::InterfaceRequestHandler<fuchsia::camera3::Stream> GetHandler() = 0;

  // Sends the given frame info to a Stream client with a pending request. If there are none, it
  // will be queued and returned for future client requests.
  virtual void AddFrame(fuchsia::camera3::FrameInfo info) = 0;
};

}  // namespace camera

#endif  // SRC_CAMERA_LIB_FAKE_STREAM_FAKE_STREAM_H_
