// GET: EgysegVasarlas
        public ActionResult Index()
        {
            var userId = HttpContext.User.Identity.GetUserId();
            var orszag = context.Orszagok
               .Include(o => o.OrszagEpuletek.Select(oe => oe.Epulet))
               .Include(o => o.OrszagEgysegek.Select(oe => oe.Egyseg))
               .Include(o => o.OrszagFejlesztesek.Select(of => of.Fejlesztes))
               .Single(o => o.ApplicationUser.Id == userId);

            var osszesEgyseg = context.Egysegek.ToList();



            var model = new EgysegVasarlasViewModel
            {
                Arany = orszag.Arany,
                SzabadHelyek = orszag.OrszagEpuletek
                    .Where(oe => oe.Epulet.Nev == "Barakk")
                    .Sum(oe => oe.Db) * 200 - orszag.OrszagEgysegek.Sum(oe => oe.Db),
                Egysegek = osszesEgyseg.Select(oe => new EgysegVasarlasListViewModel
                {
                    Id = oe.Id,
                    Nev = oe.Nev,
                    Ar = oe.Ar,
                    EllatmanyIgeny = oe.EllatmanyIgeny,
                    TamadoEro = oe.Tamadas,
                    VedekezoEro = oe.Vedekezes,
                    Zsold = oe.Zsold,
                    MeglevoDb = orszag.OrszagEgysegek
                          .Where(me => me.Egyseg.Id == oe.Id)
                          .Sum(me => me.Db)
                }).ToList()
            };


            return View(model);
        }
        public async Task<ActionResult> Index(EgysegVasarlasViewModel model)
        {
            var userId = HttpContext.User.Identity.GetUserId();
            var orszag = context.Orszagok
               .Include(o => o.ApplicationUser)
               .Include(o => o.OrszagEpuletek.Select(oe => oe.Epulet))
               .Include(o => o.OrszagEgysegek.Select(oe => oe.Egyseg))
               .Include(o => o.OrszagFejlesztesek.Select(of => of.Fejlesztes))
               .Single(o => o.ApplicationUser.Id == userId);


            bool DoesNotBuyAnything = true;
            bool negativePcs = false;
            int sumOfExpenses = 0;
            int sumOfUnits = 0;
            int szabadHelyek = orszag.OrszagEpuletek.Where(oe => oe.Epulet.Nev == "Barakk").Sum(oe => oe.Db) * 200 -
               orszag.OrszagEgysegek.Sum(oe => oe.Db);


            foreach (var item in model.Egysegek)
            {
                if (item.Db != 0)
                {
                    DoesNotBuyAnything = false;
                }

                if (item.Db < 0)
                {
                    negativePcs = true;
                }

                sumOfUnits += item.Db;
                sumOfExpenses += item.Ar * item.Db;
            }

            if (negativePcs)
            {
                ModelState.AddModelError("", "Negatív darabszám nem adható meg");
            } else if (DoesNotBuyAnything)
            {
                ModelState.AddModelError("", "Mindenhol 0 a darabszám");
            }
            else if (orszag.Arany < sumOfExpenses)
            {
                ModelState.AddModelError("", "Nincs elegendő pénz");
            }
            else if (szabadHelyek < sumOfUnits)
            {
                ModelState.AddModelError("", "Nincs elég hely a barakkokban");
            }


            if (ModelState.IsValid)
            {
                try
                {
                    var osszesEgyseg = context.Egysegek.ToList();

                    foreach (var item in model.Egysegek)
                    {

                        var egyseg = orszag.OrszagEgysegek.SingleOrDefault(e => e.Egyseg.Id == item.Id);
                        if (egyseg == null)
                        {
                            orszag.OrszagEgysegek.Add(new Models.DataAccess.Entities.OrszagEgyseg
                            {
                                Orszag = orszag,
                                Egyseg = osszesEgyseg.Single(oe => oe.Id == item.Id),
                                Db = item.Db
                            });
                        }
                        else
                        {
                            egyseg.Db += item.Db;
                        }

                    }

                    orszag.Arany -= sumOfExpenses;


                    await context.SaveChangesAsync();
                }
                catch (Exception e)
                {

                    throw;
                }


                return RedirectToAction("Index");


            }

            return View(model);
        }