using Plus.HabboHotel.GameClients;
using Plus.HabboHotel.Groups;
using Plus.HabboHotel.Rooms;

namespace Plus.Communication.Packets.Incoming.Groups
{
    internal class DeleteGroupEvent : IPacketEvent
    {
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            Group Group = (Group)null;
            if (!PlusEnvironment.GetGame().GetGroupManager().TryGetGroup(Packet.PopInt(), out Group))
                Session.SendNotification("delete.group.error.notfound");
            else if (Group.CreatorId != Session.GetHabbo().Id && !Session.GetHabbo().GetPermissions().HasRight("group_delete_override"))
                Session.SendNotification("delete.group.error.nopermission");
            else if (Group.MemberCount >= 500 && !Session.GetHabbo().GetPermissions().HasRight("group_delete_limit_override"))
            {
                Session.SendNotification("Oups, votre groupe dépasse le nombre maximum de membres (500) qu'un groupe peut dépasser avant d'être éligible pour la suppression. Demandez l'aide d'un membre du personnel.");
            }
            else
            {
                Room Room = PlusEnvironment.GetGame().GetRoomManager().LoadRoom(Group.RoomId);
                if (Room != null)
                {
                    Room.Group = (Group)null;
                    Room.RoomData.Group = (Group)null;
                }
                PlusEnvironment.GetGame().GetGroupManager().DeleteGroup(Group);
                if (Group.ForumEnabled)
                PlusEnvironment.GetGame().GetGroupForumManager().RemoveGroup(Group);
                PlusEnvironment.GetGame().GetRoomManager().UnloadRoom(Room, true);
                Session.SendNotification("Vous avez supprimé votre groupe avec succès.");
            }
        }
    }
}
