public async Task <IActionResult> Create(BattleReportViewModel viewModel)
        {
            viewModel.StatusMessage = string.Empty;
            if (!ModelState.IsValid)
            {
                viewModel.Factions = await _db.Factions.OrderBy(f => f.Name).ToListAsync();

                int firstFactionId = viewModel.Factions.FirstOrDefault().Id;
                viewModel.FirstFactionThemes = await _db.Themes.Where(t => t.FactionId == firstFactionId).OrderBy(t => t.Name).ToListAsync();

                viewModel.FirstFactionCasters = await _db.Casters.Where(c => c.FactionId == firstFactionId).OrderBy(c => c.Name).ToListAsync();

                return(View(viewModel));
            }

            if (!await _db.ApplicationUsers.AnyAsync(au => au.UserName == viewModel.BattleReport.OpponentsUsername))
            {
                viewModel.Factions = await _db.Factions.OrderBy(f => f.Name).ToListAsync();

                int firstFactionId = viewModel.Factions.FirstOrDefault().Id;
                viewModel.FirstFactionThemes = await _db.Themes.Where(t => t.FactionId == firstFactionId).OrderBy(t => t.Name).ToListAsync();

                viewModel.FirstFactionCasters = await _db.Casters.Where(c => c.FactionId == firstFactionId).OrderBy(c => c.Name).ToListAsync();

                viewModel.StatusMessage = "Error: There are no users in the database with the username specified for your opponent.";
                return(View(viewModel));
            }

            viewModel.BattleReport.ConfirmationKey     = (new Random().Next(1000, 10000));
            viewModel.BattleReport.ConfirmedByOpponent = false;

            viewModel.BattleReport.LosersUsername = viewModel.PosterWon ? viewModel.BattleReport.OpponentsUsername : viewModel.BattleReport.PostersUsername;
            viewModel.BattleReport.LosingFaction  = viewModel.PosterWon ? viewModel.BattleReport.OpponentsFaction : viewModel.BattleReport.PostersFaction;
            viewModel.BattleReport.LosingTheme    = viewModel.PosterWon ? viewModel.BattleReport.OpponentsTheme : viewModel.BattleReport.PostersTheme;
            viewModel.BattleReport.LosingCaster   = viewModel.PosterWon ? viewModel.BattleReport.OpponentsCaster : viewModel.BattleReport.PostersCaster;

            viewModel.BattleReport.WinnersUsername = viewModel.PosterWon ? viewModel.BattleReport.PostersUsername : viewModel.BattleReport.OpponentsUsername;
            viewModel.BattleReport.WinningFaction  = viewModel.PosterWon ? viewModel.BattleReport.PostersFaction : viewModel.BattleReport.OpponentsFaction;
            viewModel.BattleReport.WinningTheme    = viewModel.PosterWon ? viewModel.BattleReport.PostersTheme : viewModel.BattleReport.OpponentsTheme;
            viewModel.BattleReport.WinningCaster   = viewModel.PosterWon ? viewModel.BattleReport.PostersCaster : viewModel.BattleReport.OpponentsCaster;

            _db.BattleReports.Add(viewModel.BattleReport);

            ApplicationUser opponent = await _db.ApplicationUsers.FirstAsync(au => au.UserName == viewModel.BattleReport.OpponentsUsername);

            string opponentsEmail = opponent.Email;
            await _emailSender.SendEmailAsync(opponentsEmail, "Battle Report Posted", "The user " + viewModel.BattleReport.PostersUsername + " has added a battle report with you as their opponent. Please log in and confirm the battle report when able.");

            await _db.SaveChangesAsync();

            return(RedirectToAction("Index", "Home", new { Area = "Home" }));
        }
        public async Task <IActionResult> Create()
        {
            BattleReportViewModel viewModel = new BattleReportViewModel()
            {
                Factions      = await _db.Factions.OrderBy(f => f.Name).ToListAsync(),
                BattleReport  = new BattleReport(),
                StatusMessage = string.Empty
            };
            int firstFactionId = viewModel.Factions.FirstOrDefault().Id;

            viewModel.FirstFactionThemes = await _db.Themes.Where(t => t.FactionId == firstFactionId).OrderBy(t => t.Name).ToListAsync();

            viewModel.FirstFactionCasters = await _db.Casters.Where(c => c.FactionId == firstFactionId).OrderBy(c => c.Name).ToListAsync();

            viewModel.BattleReport.PostersUsername = User.Identity.Name;
            return(View(viewModel));
        }