// GET: Manufacturers
        public async Task <IActionResult> Index(string selectedName, int?page, SortViewModel.Sort?sort, int?selectedMinPrice, int?selectedMaxPrice, int?selectedTypeId, int?selectedManufacturerId)
        {
            if (!User.IsInRole(Areas.Identity.Roles.User) && !User.IsInRole(Areas.Identity.Roles.Admin))
            {
                return(Redirect("~/Identity/Account/Login"));
            }

            bool isFromFilter = HttpContext.Request.Query["isFromFilter"] == "true";

            _service.GetSortPagingCookiesForUserIfNull(Request.Cookies, User.Identity.Name, isFromFilter,
                                                       ref page, ref sort);
            _service.GetFilterCookiesForUserIfNull(Request.Cookies, User.Identity.Name, isFromFilter,
                                                   ref selectedName, ref selectedMinPrice, ref selectedMaxPrice, ref selectedTypeId, ref selectedManufacturerId);
            _service.SetDefaultValuesIfNull(ref selectedName, ref page, ref sort);
            _service.SetCookies(Response.Cookies, User.Identity.Name, selectedName, page, sort, selectedMinPrice, selectedMaxPrice, selectedTypeId, selectedManufacturerId);

            var products = _context.Products.Include(p => p.Manufacturer).Include(p => p.ProductType).AsQueryable();

            products = _service.Filter(products, selectedName, selectedMinPrice, selectedMaxPrice, selectedTypeId, selectedManufacturerId);

            var count = await products.CountAsync();

            products = _service.Sort(products, (SortViewModel.Sort)sort);
            products = _service.Paging(products, isFromFilter, (int)page, _pageSize);

            IndexViewModel model = new IndexViewModel
            {
                Products        = await products.ToListAsync(),
                PageViewModel   = new Infrastructure.ViewModels.PageViewModel(count, (int)page, _pageSize),
                FilterViewModel = new FilterViewModel(selectedName, selectedMinPrice, selectedMaxPrice, selectedTypeId, selectedManufacturerId, await _context.ProductTypes.ToListAsync(), await _context.Manufacturers.ToListAsync()),
                SortViewModel   = new SortViewModel((SortViewModel.Sort)sort),
            };

            return(View(model));
        }