// Copyright 2014 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_CHROMEOS_LOGIN_SCREENS_CHROME_USER_SELECTION_SCREEN_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_CHROME_USER_SELECTION_SCREEN_H_

#include <map>
#include <string>
#include <vector>

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/login/screens/user_selection_screen.h"
#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"

class AccountId;

namespace chromeos {

class ChromeUserSelectionScreen
    : public UserSelectionScreen,
      public policy::DeviceLocalAccountPolicyService::Observer {
 public:
  explicit ChromeUserSelectionScreen(const std::string& display_type);
  ~ChromeUserSelectionScreen() override;

  // UserSelectionScreen:
  void Init(const user_manager::UserList& users) override;
  void SendUserList() override;

  // policy::DeviceLocalAccountPolicyService::Observer:
  void OnPolicyUpdated(const std::string& user_id) override;
  void OnDeviceLocalAccountsChanged() override;

 private:
  // Check whether the display name set by policy for a public session has
  // changed and if so, notify the UI.
  void CheckForPublicSessionDisplayNameChange(
      policy::DeviceLocalAccountPolicyBroker* broker);

  // Check whether the list of recommended locales set by policy for a public
  // session has changed and if so, notify the UI.
  void CheckForPublicSessionLocalePolicyChange(
      policy::DeviceLocalAccountPolicyBroker* broker);

  // Check whether full management disclosure is needed for the public/managed
  // session login screen and if so, notify the UI.
  void CheckIfFullManagementDisclosureNeeded(
      policy::DeviceLocalAccountPolicyBroker* broker);

  // Notify the UI that the display name for a public session has changed,
  // taking the display name from the |User| owned by |UserManager|.
  void SetPublicSessionDisplayName(const AccountId& account_id);

  // Send an updated list of locales for a public session to the UI, consisting
  // of the |recommended_locales| followed by all other available locales.
  void SetPublicSessionLocales(
      const AccountId& account_id,
      const std::vector<std::string>& recommended_locales);

  // Send an updated flag for enabling/disable full management disclosure to the
  // UI.
  void SetPublicSessionShowFullManagementDisclosure(
      bool show_full_management_disclosure);

  policy::DeviceLocalAccountPolicyService* device_local_account_policy_service_;

  // Map from public session account IDs to their display names set by policy.
  typedef std::map<AccountId, std::string> DisplayNamesMap;
  DisplayNamesMap public_session_display_names_;

  base::WeakPtrFactory<ChromeUserSelectionScreen> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(ChromeUserSelectionScreen);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_CHROME_USER_SELECTION_SCREEN_H_
