namespace Myriad.Types
{
    public record Channel
    {
        public enum ChannelType
        {
            GuildText = 0,
            Dm = 1,
            GuildVoice = 2,
            GroupDm = 3,
            GuildCategory = 4,
            GuildNews = 5,
            GuildStore = 6
        }

        public ulong Id { get; init; }
        public ChannelType Type { get; init; }
        public ulong? GuildId { get; init; }
        public int? Position { get; init; }
        public string? Name { get; init; }
        public string? Topic { get; init; }
        public bool? Nsfw { get; init; }
        public ulong? ParentId { get; init; }
        public Overwrite[]? PermissionOverwrites { get; init; }
        public User[]? Recipients { get; init; } // NOTE: this may be null for stub channel objects

        public record Overwrite
        {
            public ulong Id { get; init; }
            public OverwriteType Type { get; init; }
            public PermissionSet Allow { get; init; }
            public PermissionSet Deny { get; init; }
        }

        public enum OverwriteType
        {
            Role = 0,
            Member = 1
        }
    }
}