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

#pragma once

#include <fuchsia/images/cpp/fidl.h>
#include <fuchsia/simplecamera/cpp/fidl.h>
#include <src/camera/simple_camera/simple_camera_lib/video_display.h>

#include "lib/component/cpp/startup_context.h"

namespace simple_camera {

class SimpleCameraApp : public fuchsia::simplecamera::SimpleCamera {
 public:
  SimpleCameraApp();
  virtual void ConnectToCamera(
      uint32_t camera_id,
      fidl::InterfaceHandle<fuchsia::images::ImagePipe> image_pipe);

 private:
  SimpleCameraApp(const SimpleCameraApp&) = delete;
  SimpleCameraApp& operator=(const SimpleCameraApp&) = delete;

  std::unique_ptr<component::StartupContext> context_;
  fidl::BindingSet<SimpleCamera> bindings_;

  simple_camera::VideoDisplay video_display_;
};

}  // namespace simple_camera
