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

                viewModel.PosterWon = viewModel.BattleReport.WinnersUsername == User.Identity.Name;
                int postersFactionId = viewModel.Factions.First(f => f.Name == viewModel.BattleReport.PostersFaction).Id;
                viewModel.PostersFactionThemes = await _db.Themes.Where(t => t.FactionId == postersFactionId).OrderBy(t => t.Name).ToListAsync();

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

                int opponentsFactionId = viewModel.Factions.First(f => f.Name == viewModel.BattleReport.OpponentsFaction).Id;
                viewModel.OpponentsFactionThemes = await _db.Themes.Where(t => t.FactionId == opponentsFactionId).OrderBy(t => t.Name).ToListAsync();

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

                return(View(viewModel));
            }

            BattleReport battleReport = await _db.BattleReports.FindAsync(viewModel.BattleReport.Id);

            battleReport.PostersFaction       = viewModel.BattleReport.PostersFaction;
            battleReport.PostersTheme         = viewModel.BattleReport.PostersTheme;
            battleReport.PostersCaster        = viewModel.BattleReport.PostersCaster;
            battleReport.PostersArmyList      = viewModel.BattleReport.PostersArmyList;
            battleReport.PostersArmyPoints    = viewModel.BattleReport.PostersArmyPoints;
            battleReport.PostersControlPoints = viewModel.BattleReport.PostersControlPoints;

            battleReport.OpponentsFaction       = viewModel.BattleReport.OpponentsFaction;
            battleReport.OpponentsTheme         = viewModel.BattleReport.OpponentsTheme;
            battleReport.OpponentsCaster        = viewModel.BattleReport.OpponentsCaster;
            battleReport.OpponentsArmyList      = viewModel.BattleReport.OpponentsArmyList;
            battleReport.OpponentsArmyPoints    = viewModel.BattleReport.OpponentsArmyPoints;
            battleReport.OpponentsControlPoints = viewModel.BattleReport.OpponentsControlPoints;

            battleReport.DatePlayed   = viewModel.BattleReport.DatePlayed;
            battleReport.EndCondition = viewModel.BattleReport.EndCondition;
            battleReport.GameSize     = viewModel.BattleReport.GameSize;
            battleReport.Scenario     = viewModel.BattleReport.Scenario;

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

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

            await _db.SaveChangesAsync();

            return(RedirectToAction(nameof(UnconfirmedBattleReports), new { id = User.Identity.Name }));
        }
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            BattleReport battleReport = await _db.BattleReports.FindAsync(id);

            if (battleReport == null)
            {
                return(NotFound());
            }

            if (battleReport.PostersUsername != User.Identity.Name)
            {
                return(Unauthorized());
            }

            EditBattleReportViewModel viewModel = new EditBattleReportViewModel()
            {
                Factions      = await _db.Factions.OrderBy(f => f.Name).ToListAsync(),
                BattleReport  = battleReport,
                StatusMessage = string.Empty
            };

            viewModel.PosterWon = viewModel.BattleReport.WinnersUsername == User.Identity.Name;

            int postersFactionId = viewModel.Factions.First(f => f.Name == battleReport.PostersFaction).Id;

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

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

            int opponentsFactionId = viewModel.Factions.First(f => f.Name == battleReport.OpponentsFaction).Id;

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

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

            return(View(viewModel));
        }