using Ryujinx.HLE.HOS.Services.Account.Acc;
using System;
using System.Linq;

namespace LibKenjinx
{
    public static partial class LibKenjinx
    {
        public static string GetOpenedUser()
        {
            var lastProfile = SwitchDevice?.AccountManager.LastOpenedUser;

            return lastProfile?.UserId.ToString() ?? "";
        }

        public static string GetUserPicture(string userId)
        {
            var uid = new UserId(userId);

            var user = SwitchDevice?.AccountManager.GetAllUsers().FirstOrDefault(x => x.UserId == uid);

            if (user == null)
                return "";

            var pic = user.Image;

            return pic != null ? Convert.ToBase64String(pic) : "";
        }

        public static void SetUserPicture(string userId, string picture)
        {
            var uid = new UserId(userId);

            SwitchDevice?.AccountManager.SetUserImage(uid, Convert.FromBase64String(picture));
        }

        public static string GetUserName(string userId)
        {
            var uid = new UserId(userId);

            var user = SwitchDevice?.AccountManager.GetAllUsers().FirstOrDefault(x => x.UserId == uid);

            return user?.Name ?? "";
        }

        public static void SetUserName(string userId, string name)
        {
            var uid = new UserId(userId);

            SwitchDevice?.AccountManager.SetUserName(uid, name);
        }

        public static string[] GetAllUsers()
        {
            return SwitchDevice?.AccountManager.GetAllUsers().Select(x => x.UserId.ToString()).ToArray() ??
                   [];
        }

        public static void AddUser(string userName, string picture)
        {
            SwitchDevice?.AccountManager.AddUser(userName, Convert.FromBase64String(picture));
        }

        public static void DeleteUser(string userId)
        {
            var uid = new UserId(userId);
            SwitchDevice?.AccountManager.DeleteUser(uid);
        }

        public static void OpenUser(string userId)
        {
            var uid = new UserId(userId);
            SwitchDevice?.AccountManager.OpenUser(uid);
        }

        public static void CloseUser(string userId)
        {
            var uid = new UserId(userId);
            SwitchDevice?.AccountManager.CloseUser(uid);
        }
    }
}
