// Copyright 2016 The Chromium 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 CHROME_BROWSER_ANDROID_VR_SHELL_UI_INTERFACE_H_
#define CHROME_BROWSER_ANDROID_VR_SHELL_UI_INTERFACE_H_

#include "base/macros.h"
#include "base/values.h"

class GURL;

namespace vr_shell {

class UiCommandHandler {
 public:
  virtual void SendCommandToUi(const base::Value& value) = 0;
};

// This class manages the communication of browser state from VR shell to the
// HTML UI. State information is asynchronous and unidirectional.
class UiInterface {
 public:
  enum Mode {
    STANDARD,
    WEB_VR
  };

  explicit UiInterface(Mode initial_mode);
  virtual ~UiInterface();

  void SetMode(Mode mode);
  Mode GetMode() { return mode_; }
  void SetMenuMode(bool enabled);
  bool GetMenuMode() { return menu_mode_; }
  void SetCinemaMode(bool enabled);
  bool GetCinemaMode() { return cinema_mode_; }

  void SetSecureOrigin(bool secure);
  void SetLoading(bool loading);
  void SetURL(const GURL& url);

  // Called by WebUI when starting VR.
  void OnDomContentsLoaded();
  void SetUiCommandHandler(UiCommandHandler* handler);

 private:
  void FlushUpdates();
  void FlushModeState();

  Mode mode_;
  bool menu_mode_ = false;
  bool cinema_mode_ = false;
  UiCommandHandler* handler_;
  bool loaded_ = false;
  base::DictionaryValue updates_;

  DISALLOW_COPY_AND_ASSIGN(UiInterface);
};

}  // namespace vr_shell

#endif  // CHROME_BROWSER_ANDROID_VR_SHELL_UI_INTERFACE_H_
