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

#ifndef SRC_LIB_UI_BASE_VIEW_VIEW_PROVIDER_SERVICE_H_
#define SRC_LIB_UI_BASE_VIEW_VIEW_PROVIDER_SERVICE_H_

#include <fuchsia/ui/app/cpp/fidl.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/fit/function.h>
#include <lib/sys/cpp/component_context.h>

#include <vector>

#include "src/lib/ui/base_view/base_view.h"

namespace scenic {

// A callback to create a view when given a context.
using ViewFactory = fit::function<std::unique_ptr<BaseView>(ViewContext context)>;

// Publishes a view provider as an outgoing service of the application.
// The views created by the view provider are owned by it and will be destroyed
// when the view provider itself is destroyed.
//
// This is only intended to be used for simple example programs.
class ViewProviderService : private fuchsia::ui::app::ViewProvider {
 public:
  ViewProviderService(sys::ComponentContext* component_context, fuchsia::ui::scenic::Scenic* scenic,
                      ViewFactory factory);

  ~ViewProviderService();

  // |fuchsia::ui::app::ViewProvider|
  void CreateView(zx::eventpair view_token,
                  fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> incoming_services,
                  fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> outgoing_services) override;

 private:
  ViewProviderService(sys::ComponentContext* component_context,
                      fuchsia::ui::scenic::Scenic* scenic);
  ViewProviderService(const ViewProviderService&) = delete;
  ViewProviderService& operator=(const ViewProviderService&) = delete;

  sys::ComponentContext* const component_context_;
  fuchsia::ui::scenic::Scenic* const scenic_;

  ViewFactory view_factory_ = nullptr;
  std::vector<std::unique_ptr<BaseView>> views_;
  fidl::BindingSet<fuchsia::ui::app::ViewProvider> bindings_;
};

}  // namespace scenic

#endif  // SRC_LIB_UI_BASE_VIEW_VIEW_PROVIDER_SERVICE_H_
