//[ValidateAntiForgeryToken]
        public ActionResult Edit(SoftwareViewModel model)
        {
            var software = _softwareService.GetSoftware(model.Id);

            if (software == null)
            {
                return(NotFound());
            }
            if (model.SoftwareCPURequirements == null)
            {
                model.SoftwareCPURequirements = new List <SoftwareCPURequirement>();
            }
            if (model.SoftwareVideoCardRequirements == null)
            {
                model.SoftwareVideoCardRequirements = new List <SoftwareVideoCardRequirement>();
            }
            var newMinCpus = model.SoftwareCPURequirements.Where(m => m.RequirementTypeId == 1).Select(m => _cpuService.GetCPU(m.CPUId));
            var newReqCpus = model.SoftwareCPURequirements.Where(m => m.RequirementTypeId == 2).Select(m => _cpuService.GetCPU(m.CPUId));
            var newMinVC   = model.SoftwareVideoCardRequirements.Where(m => m.RequirementTypeId == 1).Select(m => _videoCardService.GetVideoCard(m.VideoCardId));
            var newReqVC   = model.SoftwareVideoCardRequirements.Where(m => m.RequirementTypeId == 2).Select(m => _videoCardService.GetVideoCard(m.VideoCardId));

            if (newMinCpus.Any(m => newReqCpus.Any(z => m.Frequency > z.Frequency || m.ThreadsNumber > z.ThreadsNumber || m.CoresNumber > z.CoresNumber)))
            {
                ModelState.AddModelError("SoftwareCPURequirements", "Мінімальні вимоги не можуть бути кращими за рекомендовані");
            }
            if (newMinVC.Any(m => newReqVC.Any(z => m.Frequency > z.Frequency || m.MemoryFrequency > z.MemoryFrequency || m.MemorySize > z.MemorySize)))
            {
                ModelState.AddModelError("SoftwareVideoCardRequirements", "Мінімальні вимоги не можуть бути кращими за рекомендовані");
            }
            if (model.MinimiumRequiredRAM > model.RecommendedRequiredRAM)
            {
                ModelState.AddModelError("MinimiumRequiredRAM", "Мінімальні вимоги не можуть бути кращими за рекомендовані");
            }
            if (ModelState.IsValid)
            {
                software.Name                   = model.Name;
                software.Description            = model.Description;
                software.MinimiumRequiredRAM    = model.MinimiumRequiredRAM;
                software.RecommendedRequiredRAM = model.RecommendedRequiredRAM;
                software.Price                  = model.Price;
                software.DiscVolume             = model.DiscVolume;
                software.PublisherId            = model.PublisherId;
                software.DeveloperId            = model.DeveloperId;

                if (model.Image != null)
                {
                    var helper = new ImageHelper(_webHostEnvironment);
                    var image  = helper.GetUploadedFile(model.Image, "Software");
                    software.Image = image;
                }
                software.SoftwareCPURequirements = model.SoftwareCPURequirements.Select(m => new SoftwareCPURequirement()
                {
                    CPUId = m.CPUId, RequirementTypeId = m.RequirementTypeId
                }).ToList();
                software.SoftwareVideoCardRequirements = model.SoftwareVideoCardRequirements.Select(m => new SoftwareVideoCardRequirement()
                {
                    VideoCardId = m.VideoCardId, RequirementTypeId = m.RequirementTypeId
                }).ToList();

                var result = _softwareService.UpdateSoftware(software);

                model.Id    = software.Id;
                model.Image = null;

                if (result.Succedeed)
                {
                    return(View("../Catalog/Index", new { startView = "Software" }));
                }

                return(NotFound(result));
            }
            var cpus = _cpuService.GetCPUs();

            ViewBag.CPUs = new SelectList(cpus, "Id", "Name");
            var videoCards = _videoCardService.GetVideoCards();

            ViewBag.VideoCards = new SelectList(videoCards, "Id", "Name");
            var publishers = _publisherService.GetPublishers();

            ViewBag.Publishers = new SelectList(publishers, "Id", "Name");
            var developers = _developerService.GetDevelopers();

            ViewBag.Developers = new SelectList(developers, "Id", "Name");
            return(View("Edit", model));
        }