public async Task <IActionResult> Index()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                var returnUrl = "http://www.casualeal.com/Manage/Index";
                return(RedirectToAction("Login", "Account", routeValues: new { returnUrl }));
            }
            if (user == null)
            {
                throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
            }
            var blacklisted = await _blacklistRepository.GetByUserIdAsync(user.Id);

            if (blacklisted != null && blacklisted.IsBanned)
            {
                await _signInManager.SignOutAsync();

                _logger.LogInformation($"User {user.Email} was signed in, but blacklisted");
                return(InvalidUser());
            }

            var accountInfo = new IndexViewModel
            {
                Username         = user.UserName,
                Email            = user.Email,
                PhoneNumber      = user.PhoneNumber,
                IsEmailConfirmed = user.ConfirmedEmail,
                StatusMessage    = StatusMessage
            };

            var summonerInfo = await _accountService.GetSummonerViewAsync(user);

            var summoners = await _accountService.GetFpSummonerView();

            var referedBy = summoners.SummonerInfos.FirstOrDefault(x => x.UserId == user.ReferalId);

            var model = new AccountSummonerJointModel
            {
                ProfileInfo             = accountInfo,
                SummonerInfo            = summonerInfo,
                DiscordNames            = summoners.SummonerInfos.Select(x => x.DiscordHandle),
                ReferredByDiscordHandle = referedBy?.DiscordHandle
            };

            return(View(model));
        }
        public async Task <IActionResult> Index(AccountSummonerJointModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                var returnUrl = "http://www.casualeal.com/Manage/Index";
                return(RedirectToAction("Login", "Account", routeValues: new { returnUrl }));
            }

            var userName = user.UserName;

            if (model.ProfileInfo.Username != userName)
            {
                var setUserNameResult = await _userManager.SetUserNameAsync(user, model.ProfileInfo.Username);

                if (!setUserNameResult.Succeeded)
                {
                    throw new ApplicationException($"Unexpected error occurred setting userName for user with ID '{user.Id}'.");
                }
            }

            var email = user.Email;

            if (model.ProfileInfo.Email != email)
            {
                var setEmailResult = await _userManager.SetEmailAsync(user, model.ProfileInfo.Email);

                if (!setEmailResult.Succeeded)
                {
                    throw new ApplicationException($"Unexpected error occurred setting email for user with ID '{user.Id}'.");
                }
            }

            var phoneNumber = user.PhoneNumber;

            if (model.ProfileInfo.PhoneNumber != phoneNumber)
            {
                var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, model.ProfileInfo.PhoneNumber);

                if (!setPhoneResult.Succeeded)
                {
                    throw new ApplicationException($"Unexpected error occurred setting phone number for user with ID '{user.Id}'.");
                }
            }

            user = await _userManager.GetUserAsync(User);

            if (user.ReferalId == null && model.ReferredByDiscordHandle != null && model.ReferredByDiscordHandle != model.DefaultReferedByDiscordHandle)
            {
                var referedSummoner = await _summonerInfoRepository.GetSummonerByDiscordHandleAsync(model.ReferredByDiscordHandle);

                user.ReferalId = referedSummoner.UserId;
                await _userManager.UpdateAsync(user);
            }

            StatusMessage = "Your profile has been updated";
            return(RedirectToAction(nameof(Index)));
        }