// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/public/cpp/login/login_utils.h"

#include <string_view>

#include "ash/public/cpp/session/user_info.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/user.h"
#include "components/user_manager/user_manager.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/chromeos/resources/grit/ui_chromeos_resources.h"

namespace ash {

UserAvatar BuildAshUserAvatarForUser(const user_manager::User& user) {
  UserAvatar avatar;
  avatar.image = user.GetImage();
  if (avatar.image.isNull()) {
    avatar.image = *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
        IDR_LOGIN_DEFAULT_USER);
  }

  // TODO(jdufault): Unify image handling between this code and
  // user_image_source::GetUserImageInternal.
  auto load_image_from_resource = [&avatar](int resource_id) {
    auto& rb = ui::ResourceBundle::GetSharedInstance();
    std::string_view avatar_data = rb.GetRawDataResourceForScale(
        resource_id, rb.GetMaxResourceScaleFactor());
    avatar.bytes.assign(avatar_data.begin(), avatar_data.end());
  };

  if (user.has_image_bytes()) {
    avatar.bytes.assign(user.image_bytes()->begin(), user.image_bytes()->end());
  } else if (user.image_is_stub()) {
    load_image_from_resource(IDR_LOGIN_DEFAULT_USER);
  }

  return avatar;
}

UserAvatar BuildAshUserAvatarForAccountId(const AccountId& account_id) {
  const user_manager::UserManager* user_manager =
      user_manager::UserManager::Get();
  CHECK(user_manager);
  const user_manager::User* user = user_manager->FindUser(account_id);
  CHECK(user);
  return BuildAshUserAvatarForUser(*user);
}

}  // namespace ash
