public void Create(Chat chat)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                Chat newChat = new Chat {
                    Name = chat.Name, Creator = chat.Creator
                };

                db.Chats.Add(newChat);
                db.SaveChanges();
            }
        }
        public void LoginOrLogout(User user, string status)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User changedUser = db.Users.FirstOrDefault(u => u.Name == user.Name && u.Password == user.Password);

                changedUser.Status = status;

                db.Users.Update(changedUser);
                db.SaveChanges();
            }
        }
        public void Register(User user, string role, string status)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User newUser = new User {
                    Name = user.Name, Password = user.Password, Role = role, Status = status
                };

                db.Users.Add(newUser);
                db.SaveChanges();
            }
        }
        public void BanUserToChat(UserChat userChatBanned, double time)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User     userBanned = db.Users.Include(s => s.UserChats).FirstOrDefault(s => s.Name == userChatBanned.User.Name);
                Chat     chat       = db.Chats.Include(s => s.UserChats).FirstOrDefault(s => s.Name == userChatBanned.Chat.Name);
                UserChat userChat   = userBanned.UserChats.Where(uc => uc.ChatId == chat.Id && uc.UserId == userBanned.Id).FirstOrDefault();

                userChat.BanEndDate = DateTime.Now.AddMinutes(time);

                db.SaveChanges();
            }
        }
        public void RemoveUserFromChat(string chatName, string userName)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User     user     = db.Users.Include(s => s.UserChats).FirstOrDefault(s => s.Name == userName);
                Chat     chat     = db.Chats.Include(s => s.UserChats).FirstOrDefault(s => s.Name == chatName);
                UserChat userChat = user.UserChats.Where(uc => uc.ChatId == chat.Id && uc.UserId == user.Id).FirstOrDefault();

                chat.UserChats.Remove(userChat);
                user.UserChats.Remove(userChat);

                db.SaveChanges();
            }
        }
        public void BanUser(User user, double time)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User            userBanned = db.Users.Include(s => s.UserChats).FirstOrDefault(s => s.Name == user.Name);
                List <UserChat> userChats  = userBanned.UserChats.Where(uc => uc.UserId == userBanned.Id).ToList();

                for (int i = 0; i < userChats.Count; i++)
                {
                    userChats[i].BanEndDate = DateTime.Now.AddMinutes(time);
                }

                db.SaveChanges();
            }
        }
        public void RenameChat(Chat chat, string newChatName)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                Chat           chatChanged = db.Chats.Where(c => c.Name == chat.Name).FirstOrDefault();
                List <Message> messages    = db.Messages.Where(c => c.ChatName == chat.Name).ToList();

                chatChanged.Name = newChatName;
                for (int i = 0; i < messages.Count; i++)
                {
                    messages[i].ChatName = newChatName;
                }

                db.SaveChanges();
            }
        }
        public void AddMessageToChat(Message message)
        {
            if (IsUserInChat(message.ChatName, message.Author))
            {
                using (ChatAppContext db = new ChatAppContext())
                {
                    Chat    chat       = db.Chats.Include(s => s.Messages).FirstOrDefault(s => s.Name == message.ChatName);
                    Message newMessage = new Message {
                        ChatName = message.ChatName, Author = message.Author, Text = message.Text
                    };

                    chat.Messages.Add(newMessage);

                    db.SaveChanges();
                }
            }
        }
        public void ChangeModerator(User user, bool isModerator)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User userChanged = db.Users.Where(u => u.Name == user.Name).FirstOrDefault();

                if (isModerator)
                {
                    userChanged.Role = "moderator";
                }
                else
                {
                    userChanged.Role = "user";
                }

                db.SaveChanges();
            }
        }
        public void AddUserToChat(UserChat userChat)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                Chat     chat        = db.Chats.Include(s => s.UserChats).FirstOrDefault(s => s.Name == userChat.Chat.Name);
                User     user        = db.Users.Include(s => s.UserChats).FirstOrDefault(s => s.Name == userChat.User.Name);
                UserChat newUserChat = new UserChat {
                    ChatId = chat.Id, UserId = user.Id, BanEndDate = new DateTime()
                };

                if (user.UserChats.Select(uc => uc.ChatId).FirstOrDefault() != newUserChat.ChatId)
                {
                    chat.UserChats.Add(newUserChat);
                    user.UserChats.Add(newUserChat);

                    db.SaveChanges();
                }
            }
        }
        public void Delete(string chatName, string userName)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User           user        = db.Users.Include(s => s.UserChats).FirstOrDefault(s => s.Name == userName);
                Chat           chat        = db.Chats.Include(s => s.UserChats).FirstOrDefault(s => s.Name == chatName);
                List <Message> messages    = db.Messages.Where(m => m.ChatId == chat.Id).ToList();
                UserChat       newUserChat = new UserChat {
                    ChatId = chat.Id, UserId = user.Id
                };

                chat.UserChats.Remove(newUserChat);
                user.UserChats.Remove(newUserChat);
                Messages.RemoveRange(messages);

                db.Remove(chat);
                db.SaveChanges();
            }
        }
        public void RenameUser(User user, string newUserName)
        {
            using (ChatAppContext db = new ChatAppContext())
            {
                User           userChanged = db.Users.Where(u => u.Name == user.Name).FirstOrDefault();
                List <Chat>    chats       = db.Chats.Where(c => c.Creator == user.Name).ToList();
                List <Message> messages    = db.Messages.Where(m => m.Author == user.Name).ToList();

                userChanged.Name = newUserName;
                for (int i = 0; i < chats.Count; i++)
                {
                    chats[i].Creator = newUserName;
                }
                for (int i = 0; i < messages.Count; i++)
                {
                    messages[i].Author = newUserName;
                }

                db.SaveChanges();
            }
        }