// 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 PERIDOT_BIN_SESSIONMGR_PRESENTATION_PROVIDER_H_
#define PERIDOT_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  // PERIDOT_BIN_SESSIONMGR_PRESENTATION_PROVIDER_H_
