// 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_MODULAR_BIN_SESSIONMGR_PRESENTATION_PROVIDER_H_
#define SRC_MODULAR_BIN_SESSIONMGR_PRESENTATION_PROVIDER_H_

#include <fuchsia/modular/cpp/fidl.h>
#include <fuchsia/ui/policy/cpp/fidl.h>
#include <lib/fidl/cpp/interface_request.h>

#include "src/lib/fxl/macros.h"

namespace modular {

// Interface that allows a class that implements this functionality to pass a
// purposeful reference to itself to another class that needs the functionality.
class PresentationProvider {
 public:
  PresentationProvider();
  virtual ~PresentationProvider();

  virtual void GetPresentation(
      fidl::StringPtr story_id,
      fidl::InterfaceRequest<fuchsia::ui::policy::Presentation> request) = 0;

  virtual void WatchVisualState(
      fidl::StringPtr story_id,
      fidl::InterfaceHandle<fuchsia::modular::StoryVisualStateWatcher> watcher) = 0;
};

}  // namespace modular

#endif  // SRC_MODULAR_BIN_SESSIONMGR_PRESENTATION_PROVIDER_H_
