using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Luski.Shared.PublicServers.V1.Enums;

namespace Luski.net.Structures.Public;

public class Role
{
    public required PublicServer Server { get; init; } = default!;
    public required long ID { get; init; } = default!;
    public required string Name { get; init; } = default!;
    public required int Index { get; init; } = default!;
    public required Color Color { get; init; } = default!;
    public required string Description { get; init; } = default!;
    public required string DisplayName { get; init; } = default!;
    public required ServerPermission ServerPermissions { get; init; } = default!;
    public required long[] MembersListID { get; init; } = default!;
    private List<SocketUser>? RawUsers = null;

    public async Task<SocketUser[]> GetMembers()
    {
        if (RawUsers is null)
        {
            RawUsers = new();
            foreach (long m in MembersListID)
            {
                RawUsers.Add(await Server.GetUser<SocketUser>(m, CancellationToken.None));
            }
        }
        
        return RawUsers!.ToArray();
    }
}