public ActionResult EditUnit([DataSourceRequest] DataSourceRequest request, UnitModelAdmin unit)
        {
            if (unit != null && ModelState.IsValid)
            {
                var context    = new ApplicationDbContext();
                var unitToEdit = context.Units.FirstOrDefault(p => p.Id == unit.Id);
                if (unitToEdit != null)
                {
                    unitToEdit.Type                = unit.Type;
                    unitToEdit.WoodCost            = unit.WoodCost;
                    unitToEdit.IronCost            = unit.IronCost;
                    unitToEdit.FoodCost            = unit.FoodCost;
                    unitToEdit.PopulationCost      = unit.PopulationCost;
                    unitToEdit.BuildTime           = TimeToSeconds(unit.BuildTime);
                    unitToEdit.Speed               = unit.Speed;
                    unitToEdit.HealthPoints        = unit.HealthPoints;
                    unitToEdit.CarryingCapacity    = unit.CarryingCapacity;
                    unitToEdit.CavalryPower        = unit.CavalryPower;
                    unitToEdit.InfantryPower       = unit.InfantryPower;
                    unitToEdit.SiegeArtilleryPower = unit.SiegeArtilleryPower;

                    context.SaveChanges();
                }
            }

            return(Json(new[] { unit }.ToDataSourceResult(request, ModelState)));
        }
        public ActionResult DeleteUnit([DataSourceRequest] DataSourceRequest request, UnitModelAdmin unit)
        {
            if (unit != null)
            {
                var context = new ApplicationDbContext();

                var removeFromUnits = context.Units.Where(u => u.Id == unit.Id);
                foreach (var u in removeFromUnits)
                {
                    context.Units.Remove(u);
                }

                var removeFromUnitsInProgress = context.UnitsInProgress.Where(u => u.Id == unit.Id);
                foreach (var u in removeFromUnitsInProgress)
                {
                    context.UnitsInProgress.Remove(u);
                }

                var removeFromUserUnits = context.UsersUnits.Where(u => u.UnitId == unit.Id);
                foreach (var u in removeFromUserUnits)
                {
                    context.UsersUnits.Remove(u);
                }

                var buildingToRemove = context.Units.FirstOrDefault(b => b.Id == unit.Id);
                if (buildingToRemove != null)
                {
                    context.Units.Remove(buildingToRemove);
                    context.SaveChanges();
                }
            }

            return(Json(new[] { unit }.ToDataSourceResult(request, ModelState)));
        }
        public ActionResult CreateNewUnit([DataSourceRequest] DataSourceRequest request, UnitModelAdmin unit)
        {
            if (unit != null && ModelState.IsValid)
            {
                var context = new ApplicationDbContext();
                var newUnit = new Unit
                {
                    Type                = unit.Type,
                    WoodCost            = unit.WoodCost,
                    IronCost            = unit.IronCost,
                    FoodCost            = unit.FoodCost,
                    PopulationCost      = unit.PopulationCost,
                    BuildTime           = Convert.ToInt32(unit.BuildTime),
                    CarryingCapacity    = unit.CarryingCapacity,
                    Speed               = unit.Speed,
                    CavalryPower        = unit.CavalryPower,
                    SiegeArtilleryPower = unit.SiegeArtilleryPower,
                    InfantryPower       = unit.InfantryPower,
                    HealthPoints        = unit.HealthPoints,
                };
                context.Units.Add(newUnit);

                context.UnitRequirements.Add(new UnitRequirement
                {
                    UnitId                = newUnit.Id,
                    RequiredBuildingId    = context.Buildings.FirstOrDefault(x => x.Type == "Barracks").Id,
                    RequiredBuildingLevel = 1
                });


                context.SaveChanges();
            }
            unit.BuildTime = SecondsToTime(Convert.ToInt32(unit.BuildTime));
            return(Json(new[] { unit }.ToDataSourceResult(request, ModelState)));
        }