// Display view to search for people to add to the group
        public async Task <IActionResult> AddPeopleToGroup(int GroupId)
        {
            var viewModel = new AddToPeopleToGroupViewModel
            {
                Group = await _context.Groups
                        .FirstOrDefaultAsync(g => g.GroupId == GroupId)
            };

            return(View(viewModel));
        }
        // Search for users to add to the group and display search results
        public async Task <IActionResult> SearchForPeople(AddToPeopleToGroupViewModel viewModel)
        {
            var searchText = viewModel.SearchText;

            viewModel.Group = await _context.Groups
                              .Include(g => g.GroupUsers)
                              .FirstOrDefaultAsync(g => g.GroupId == viewModel.GroupId);

            viewModel.CurrentUser = await GetCurrentUserAsync();

            viewModel.Users = await _context.ApplicationUsers
                              .Where(u => !u.GroupUsers.Any(gu => gu.GroupId == viewModel.GroupId))
                              .Where(u => u.FirstName.Contains(searchText) || u.LastName.Contains(searchText))
                              .ToListAsync();

            return(View(viewModel));
        }
        public async Task <IActionResult> AddUserToGroup(AddToPeopleToGroupViewModel viewModel)
        {
            var groupId   = viewModel.GroupId;
            var userId    = viewModel.UserId;
            var addedUser = await _context.Users.FirstOrDefaultAsync(u => u.Id == userId);

            var existingGroupUser = await _context.GroupUsers.FirstOrDefaultAsync(gu => gu.GroupId == groupId && gu.UserId == userId && !gu.Joined);

            if (existingGroupUser == null)
            {
                var groupUser = new GroupUser
                {
                    GroupId = groupId,
                    UserId  = userId,
                    Joined  = true
                };
                _context.GroupUsers.Add(groupUser);
                await _context.SaveChangesAsync();

                var successMsg = TempData["SuccessMessage"] as string;
                TempData["SuccessMessage"] = $"{addedUser.FirstName} {addedUser.LastName} has been added to your group!";

                viewModel.Group = await _context.Groups.FirstOrDefaultAsync(g => g.GroupId == viewModel.GroupId);

                return(RedirectToAction(nameof(SearchForPeople), new {
                    GroupId = viewModel.GroupId,
                    SearchText = viewModel.SearchText,
                }));
            }
            // accept user request to join group by changing Joined to true
            else
            {
                existingGroupUser.Joined = true;
                _context.GroupUsers.Update(existingGroupUser);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Details), new { id = groupId }));
            }
        }