// 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_UI_ENTERPRISE_STARTUP_DIALOG_H_
#define CHROME_BROWSER_UI_ENTERPRISE_STARTUP_DIALOG_H_

#include <memory>
#include <string>

#include "base/functional/callback.h"
#include "third_party/abseil-cpp/absl/types/optional.h"

namespace policy {

// A dialog shown when there is non-trivial work that has to be finished
// before any Chrome window can be opened during startup. This dialog is only
// enabled by enterprise policy. For example, cloud policy enrollment or forced
// upgrade.
class EnterpriseStartupDialog {
 public:
  // Callback when dialog is closed.
  // |was_accepted| is true iff user confirmed the dialog. False if user
  // canceled the dialog.
  // |can_show_browser_window| is true if dialog is dismissed automatically once
  // the non-trivial work is finished and browser window can be displayed.
  // Otherwise, it's false. For example, user close the dialog or
  // click 'Relaunch Chrome' button on the dialog.
  using DialogResultCallback =
      base::OnceCallback<void(bool was_accepted, bool can_show_browser_window)>;

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

  virtual ~EnterpriseStartupDialog() = default;

  // Show the dialog. Please note that the dialog won't contain any
  // useful content until |Display*()| is called.
  static std::unique_ptr<EnterpriseStartupDialog> CreateAndShowDialog(
      DialogResultCallback callback);

  // Display |information| with a throbber. Changes the content of dialog
  // without re-opening it.
  virtual void DisplayLaunchingInformationWithThrobber(
      const std::u16string& information) = 0;
  // Display |error_message| with an error icon. Show confirm button with
  // value |accept_button| if provided. Changes the content of dialog without
  // re-opening it.
  virtual void DisplayErrorMessage(
      const std::u16string& error_message,
      const absl::optional<std::u16string>& accept_button) = 0;
  // Return true if dialog is being displayed.
  virtual bool IsShowing() = 0;

 protected:
  EnterpriseStartupDialog() = default;
};

}  // namespace policy

#endif  // CHROME_BROWSER_UI_ENTERPRISE_STARTUP_DIALOG_H_
