// Copyright 2018 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.

#include "ash/system/supervised/supervised_icon_string.h"

#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/session/session_controller.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/l10n/l10n_util.h"

using base::UTF8ToUTF16;

namespace ash {

const gfx::VectorIcon& GetSupervisedUserIcon() {
  SessionController* session_controller = Shell::Get()->session_controller();

  if (session_controller->IsUserSupervised() &&
      session_controller->IsUserChild())
    return kSystemMenuChildUserIcon;

  return kSystemMenuSupervisedUserIcon;
}

base::string16 GetSupervisedUserMessage() {
  SessionController* session_controller = Shell::Get()->session_controller();
  DCHECK(session_controller->IsUserSupervised());
  DCHECK(session_controller->IsActiveUserSessionStarted());

  // Get the active user session.
  const mojom::UserSession* const user_session =
      session_controller->GetUserSession(0);
  DCHECK(user_session);

  base::string16 first_custodian = UTF8ToUTF16(user_session->custodian_email);
  base::string16 second_custodian =
      UTF8ToUTF16(user_session->second_custodian_email);

  // Regular supervised user. The "manager" is the first custodian.
  if (!Shell::Get()->session_controller()->IsUserChild()) {
    return l10n_util::GetStringFUTF16(IDS_ASH_USER_IS_SUPERVISED_BY_NOTICE,
                                      first_custodian);
  }

  // Child supervised user.
  if (second_custodian.empty()) {
    return l10n_util::GetStringFUTF16(
        IDS_ASH_CHILD_USER_IS_MANAGED_BY_ONE_PARENT_NOTICE, first_custodian);
  }
  return l10n_util::GetStringFUTF16(
      IDS_ASH_CHILD_USER_IS_MANAGED_BY_TWO_PARENTS_NOTICE, first_custodian,
      second_custodian);
}

}  // namespace ash
