// Copyright 2015 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_PASSWORDS_CREDENTIAL_MANAGER_DIALOG_CONTROLLER_H_
#define CHROME_BROWSER_UI_PASSWORDS_CREDENTIAL_MANAGER_DIALOG_CONTROLLER_H_

#include <memory>
#include <string>
#include <utility>
#include <vector>

#include "chrome/browser/ui/passwords/password_combined_selector_controller.h"
#include "components/password_manager/core/common/credential_manager_types.h"

namespace password_manager {
struct PasswordForm;
}  // namespace password_manager

namespace url {
class Origin;
}  // namespace url

// An interface used by the password dialog (the account chooser) for setting
// and retrieving the state.
class CredentialManagerDialogController : public PasswordCombinedSelectorController {
 public:

  // Returns forms from the password database for the current site.
  const FormsVector& GetLocalForms() const override = 0;

  // Returns the origin of the current site.
  virtual url::Origin GetOrigin() const = 0;

  // Returns a title of the account chooser.
  virtual std::u16string GetAccountChooserTitle() const = 0;

  // Whether the account chooser should display the "Sign in" button.
  virtual bool ShouldShowSignInButton() const = 0;

  // Returns the title for the autosignin first run dialog.
  virtual std::u16string GetAutoSigninPromoTitle() const = 0;

  // Returns a text of the auto signin first run promo.
  virtual std::u16string GetAutoSigninText() const = 0;

  // Returns true if the footer about Google Account should be shown.
  virtual bool ShouldShowFooter() const = 0;

  // Called when the user chooses a credential.
  void OnChooseCredentials(
      const password_manager::PasswordForm& password_form,
      password_manager::CredentialType credential_type) override = 0;

  // Called when the user clicks "Sign in" in the account chooser.
  virtual void OnSignInClicked() = 0;

  // Called when user clicks OK in the auto signin first run promo.
  virtual void OnAutoSigninOK() = 0;

  // Called when user disables the auto signin setting.
  virtual void OnAutoSigninTurnOff() = 0;

  // Called when the dialog was closed.
  void OnCloseDialog() override = 0;

  // PasswordCombinedSelectorController:
  DisplayType GetDisplayType() const override = 0;
  bool ShouldShowTopIllustration() const override = 0;
  std::u16string GetTitle() const override = 0;
  std::u16string GetSubtitle() const override = 0;
  std::u16string GetOkButtonLabel() const override = 0;

 protected:
  ~CredentialManagerDialogController() override = default;
};

#endif  // CHROME_BROWSER_UI_PASSWORDS_CREDENTIAL_MANAGER_DIALOG_CONTROLLER_H_
