// Copyright 2019 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_EMBEDDED_VIEW_UTILS_H_
#define SRC_LIB_UI_BASE_VIEW_EMBEDDED_VIEW_UTILS_H_

#include <fuchsia/ui/app/cpp/fidl.h>
#include <fuchsia/ui/gfx/cpp/fidl.h>
#include <fuchsia/ui/input/cpp/fidl.h>
#include <fuchsia/ui/scenic/cpp/fidl.h>
#include <fuchsia/ui/views/cpp/fidl.h>
#include <lib/sys/cpp/service_directory.h>
#include <lib/ui/scenic/cpp/resources.h>
#include <lib/ui/scenic/cpp/session.h>

namespace scenic {

// Serves as the return value for LaunchAppAndCreateView(), below.
struct EmbeddedViewInfo {
  // Controls the launched app.  The app will be destroyed if this connection
  // is closed.
  fuchsia::sys::ComponentControllerPtr controller;

  // Services provided by the launched app.  Must not be destroyed
  // immediately, otherwise the |view_provider| connection may not be
  // established.
  std::shared_ptr<sys::ServiceDirectory> app_services;

  // ViewProvider service obtained from the app via |app_services|.  Must not
  // be destroyed immediately, otherwise the call to CreateView() might not be
  // processed.
  fuchsia::ui::app::ViewProviderPtr view_provider;

  // A token that can be used to create a ViewHolder; the corresponding token
  // was provided to |view_provider| via ViewProvider.CreateView().  The
  // launched app is expected to create a View, which will be connected to the
  // ViewHolder created with this token.
  fuchsia::ui::views::ViewHolderToken view_holder_token;

  // The ViewRef of the embedded View.
  fuchsia::ui::views::ViewRef view_ref;
};

// Launch a component and connect to its ViewProvider service, passing it the
// necessary information to attach itself as a child view.  Populates the
// returned EmbeddedViewInfo, which the caller can use to embed the child.
// For example, an interface to a ViewProvider is obtained, a pair of
// zx::eventpairs is created, CreateView is called, etc.  This encapsulates
// the boilerplate the the client would otherwise write themselves.
EmbeddedViewInfo LaunchComponentAndCreateView(const fuchsia::sys::LauncherPtr& launcher,
                                              const std::string& component_url,
                                              const std::vector<std::string>& component_args = {});

}  // namespace scenic

#endif  // SRC_LIB_UI_BASE_VIEW_EMBEDDED_VIEW_UTILS_H_
