// 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 LIB_UI_BASE_VIEW_CPP_VIEW_FACTORY_H_
#define LIB_UI_BASE_VIEW_CPP_VIEW_FACTORY_H_

#include <fuchsia/ui/app/cpp/fidl.h>
#include <functional>
#include <vector>

#include "lib/component/cpp/startup_context.h"
#include "lib/ui/base_view/cpp/base_view.h"
#include "lib/ui/scenic/cpp/session.h"

namespace scenic {

// Parameters for creating a view.
struct ViewFactoryArgs {
  scenic::SessionPtrAndListenerRequest session_and_listener_request;
  zx::eventpair view_token;
  fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> incoming_services;
  fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> outgoing_services;
  component::StartupContext* startup_context;
};

// A callback to create a view in response to a call to
// |ViewProvider.Create()|.
using ViewFactory =
    std::function<std::unique_ptr<BaseView>(ViewFactoryArgs args)>;

}  // namespace scenic

#endif  // LIB_UI_BASE_VIEW_CPP_VIEW_FACTORY_H_
