// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_VR_BROWSER_RENDERER_H_
#define CHROME_BROWSER_VR_BROWSER_RENDERER_H_

#include <memory>
#include <optional>

#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "chrome/browser/vr/graphics_delegate.h"
#include "chrome/browser/vr/ui_test_input.h"
#include "chrome/browser/vr/vr_export.h"
#include "device/vr/public/mojom/isolated_xr_service.mojom-forward.h"
#include "device/vr/public/mojom/vr_service.mojom-forward.h"
#include "device/vr/util/sliding_average.h"

namespace base {
class TimeTicks;
}  // namespace base

namespace vr {

class UiInterface;
struct RenderInfo;
struct UiVisibilityState;

// The BrowserRenderer handles all input/output activities during a frame.
// This includes head movement, controller movement and input, audio output and
// rendering of the frame.
class VR_EXPORT BrowserRenderer {
 public:
  BrowserRenderer(std::unique_ptr<UiInterface> ui,
                  std::unique_ptr<GraphicsDelegate> graphics_delegate,
                  size_t sliding_time_size);

  BrowserRenderer(const BrowserRenderer&) = delete;
  BrowserRenderer& operator=(const BrowserRenderer&) = delete;

  ~BrowserRenderer();

  void DrawBrowserFrame(base::TimeTicks current_time,
                        const gfx::Transform& head_pose);
  void DrawWebXrFrame(base::TimeTicks current_time,
                      const gfx::Transform& head_pose);

  // Allows passing std::nullopt in case the test is shutdown before the
  // visibility notification has fired.
  void WatchElementForVisibilityStatusForTesting(
      std::optional<UiVisibilityState> visibility_expectation);

 private:

  void Draw(FrameType frame_type,
            base::TimeTicks current_time,
            const gfx::Transform& head_pose);

  // Position, hide and/or show UI elements, process input and update textures.
  // Returns true if the scene changed.
  void UpdateUi(const RenderInfo& render_info,
                base::TimeTicks currrent_time,
                FrameType frame_type);
  void DrawWebXrOverlay(const RenderInfo& render_info);
  void DrawBrowserUi(const RenderInfo& render_info);
  void ReportElementVisibilityStatus(const base::TimeTicks& current_time);
  void ReportElementVisibilityResult(bool result);

  std::unique_ptr<GraphicsDelegate> graphics_delegate_;

  std::optional<UiVisibilityState> ui_visibility_state_;
  device::SlidingTimeDeltaAverage ui_processing_time_;

  // ui_ is using gl contexts during destruction (skia context specifically), so
  // it must be destroyed before graphics_delegate_.
  std::unique_ptr<UiInterface> ui_;
};

}  // namespace vr

#endif  // CHROME_BROWSER_VR_BROWSER_RENDERER_H_
