public async Task <IActionResult> OnPostUpdateAsync(int id, int index, int encounterID)
        {
            EncounterID = encounterID;
            if (ModelState.TryGetValue("Ship.BonusCurrent", out var bonusVal) &&
                ModelState.TryGetValue("Ship.Name", out var nameVal) &&
                ModelState.TryGetValue("Ship.Roll", out var rollVal))
            {
                string newName = nameVal.AttemptedValue.Split(',')[index];
                if (int.TryParse(bonusVal.AttemptedValue.Split(',')[index], out int bonus))
                {
                    if (int.TryParse(rollVal.AttemptedValue.Split(',')[index], out int roll))
                    {
                        var ship = await _db.Ships.FindAsync(id);

                        if (ship != null)
                        {
                            ship.Name              = newName;
                            ship.BonusCurrent      = bonus;
                            ship.Roll              = roll;
                            _db.Attach(ship).State = EntityState.Modified;
                            await _db.SaveChangesAsync();
                        }
                    }
                }
            }
            return(RedirectToPage(EncounterHolder.Create(Encounter)));
        }
        public async Task <IActionResult> OnPostResetCounterAsync(int encounterID)
        {
            EncounterID        = encounterID;
            CurrentRound.Round = 1;
            CurrentRound.Step  = ROUND_STEP.ENGINEERING;
            await _db.SaveChangesAsync();

            return(RedirectToPage(EncounterHolder.Create(Encounter)));
        }
        public async Task <IActionResult> OnPostAddShipAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            Ship.EncounterID = Encounter.EncounterID;
            _db.Ships.Add(Ship);
            await _db.SaveChangesAsync();

            return(RedirectToPage(EncounterHolder.Create(Encounter)));
        }
        public async Task <IActionResult> OnPostDeleteAsync(int id, int encounterID)
        {
            EncounterID = encounterID;
            var ship = await _db.Ships.FindAsync(id);

            if (ship != null)
            {
                _db.Ships.Remove(ship);
                await _db.SaveChangesAsync();
            }

            return(RedirectToPage(EncounterHolder.Create(Encounter)));
        }
        public async Task <IActionResult> OnPostDuplicateAsync(int id, int encounterID)
        {
            EncounterID = encounterID;
            var ship = await _db.Ships.FindAsync(id);

            if (ship != null)
            {
                Ship newShip = new Ship
                {
                    Name        = ship.Name + " (copy)",
                    BonusBase   = ship.BonusBase,
                    EncounterID = Encounter.EncounterID
                };
                _db.Ships.Add(newShip);
                await _db.SaveChangesAsync();
            }

            return(RedirectToPage(EncounterHolder.Create(Encounter)));
        }
        public async Task <IActionResult> OnPostRollAsync(int encounterID)
        {
            EncounterID       = encounterID;
            CurrentRound.Step = (ROUND_STEP)(((int)CurrentRound.Step + 1) % 3);
            if (CurrentRound.Step == ROUND_STEP.HELM)
            {
                Random r = new Random();
                foreach (var ship in Ships)
                {
                    ship.Roll = r.Next(20) + 1 + ship.BonusCurrent;
                    _db.Attach(ship).State = EntityState.Modified;
                }
            }
            else if (CurrentRound.Step == ROUND_STEP.ENGINEERING)
            {
                CurrentRound.Round++;
            }
            await _db.SaveChangesAsync();

            return(RedirectToPage(EncounterHolder.Create(Encounter)));
        }