public async Task <IActionResult> DeleteUser(AdminVerificationForUserVM verificationVM)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    throw new Exception("Something went wrong!");
                }
                if (string.IsNullOrWhiteSpace(verificationVM.UserId))
                {
                    throw new Exception("Something went wrong. Please try again.");
                }

                var result = await _service.DeleteUser(verificationVM);

                if (result.Failed == null)
                {
                    return(Ok(result.Success));
                }

                if (result.Failed.Contains("found"))
                {
                    return(NotFound(result.Failed));
                }

                throw new Exception(result.Failed);
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public async Task <AdminResultVM> DeleteUser(AdminVerificationForUserVM verificationVM)
        {
            AdminResultVM resultVM = new AdminResultVM();

            try
            {
                if (string.IsNullOrWhiteSpace(verificationVM.AdminId) ||
                    string.IsNullOrWhiteSpace(verificationVM.UserId) ||
                    string.IsNullOrWhiteSpace(verificationVM.AdminToken))
                {
                    throw new Exception("Something went wrong.");
                }

                var admin = await _userManager.FindByIdAsync(verificationVM.AdminId);

                if (admin == null)
                {
                    throw new Exception("Cannot verify user.");
                }

                var adminResult = await _userManager.VerifyUserTokenAsync(admin, "Default", "authentication-backend", verificationVM.AdminToken);

                if (!adminResult)
                {
                    throw new Exception("Could not verify the administrator.");
                }

                var user = await _userManager.FindByIdAsync(verificationVM.UserId);

                if (user == null)
                {
                    throw new Exception("User could not be found.");
                }

                var result = await _userManager.DeleteAsync(user);

                if (result.Succeeded)
                {
                    resultVM.Success = "User was successfully removed";

                    return(resultVM);
                }
                else
                {
                    throw new Exception(result.Errors.ToString());
                }
            }
            catch (Exception ex)
            {
                resultVM.Failed = ex.Message;

                return(resultVM);
            }
        }
        public async Task <IActionResult> GetUser(AdminVerificationForUserVM admin)
        {
            if (string.IsNullOrWhiteSpace(admin.AdminId) || string.IsNullOrWhiteSpace(admin.AdminToken) ||
                string.IsNullOrWhiteSpace(admin.UserId))
            {
                return(BadRequest("Something went wrong."));
            }

            var user = await _service.GetUser(admin);

            if (user.ErrorMessage == null)
            {
                return(Ok(user));
            }

            if (user.ErrorMessage.Contains("Found"))
            {
                return(NotFound(user.ErrorMessage));
            }
            return(BadRequest(user.ErrorMessage));
        }
        public async Task <AdminUserDetailsVM> GetUser(AdminVerificationForUserVM verificationVM)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(verificationVM.AdminId) ||
                    string.IsNullOrWhiteSpace(verificationVM.UserId) ||
                    string.IsNullOrWhiteSpace(verificationVM.AdminToken))
                {
                    throw new Exception("Something went wrong.");
                }

                var admin = await _userManager.FindByIdAsync(verificationVM.AdminId);

                if (admin == null)
                {
                    throw new Exception("Cannot verify user.");
                }

                var adminResult = await _userManager.VerifyUserTokenAsync(admin, "Default", "authentication-backend", verificationVM.AdminToken);

                if (!adminResult)
                {
                    throw new Exception("Could not verify the administrator.");
                }

                var user = await _userManager.FindByIdAsync(verificationVM.UserId);

                if (user == null)
                {
                    throw new Exception("User could not be found.");
                }

                // Doing it this way because for some reason it throws an exception if they are combined.
                DetailsVM User = new DetailsVM
                {
                    UserId    = user.Id,
                    UserName  = user.UserName,
                    FirstName = user.FirstName,
                    LastName  = user.LastName,
                    Age       = user.Age,
                    Email     = user.Email,
                    IsAdmin   = user.IsAdmin,
                    Roles     = await _userManager.GetRolesAsync(user),
                };

                AdminUserDetailsVM userVM = new AdminUserDetailsVM
                {
                    AdminId       = admin.Id,
                    User          = User,
                    FrontEndToken = VerificationToken(),
                    AdminToken    = await UserToken(admin),
                };

                return(userVM);
            }
            catch (Exception ex)
            {
                AdminUserDetailsVM userVM = new AdminUserDetailsVM
                {
                    ErrorMessage = ex.Message
                };

                return(userVM);
            }
        }