public IActionResult SearchedProducts(string searchTerm, int?page)
        {
            if (string.IsNullOrEmpty(searchTerm))
            {
                return(RedirectToAction("Index", "Home"));
            }

            var products = this.productsService
                           .GetByName(searchTerm)
                           .Where(p => p.IsPublished == true)
                           .OrderBy(x => x.Price)
                           .ToList();

            List <CategoriesNavigationViewModel> viewCategoryPc = this.categiriesService
                                                                  .GetAllCategoriesSortedByName()
                                                                  .Where(x => x.CategoriesGroup == CategoriesGroup.Pc)
                                                                  .Select(c => new CategoriesNavigationViewModel(c))
                                                                  .ToList();

            List <CategoriesNavigationViewModel> categoriesSmartPhone = this.categiriesService
                                                                        .GetAllCategoriesSortedByName()
                                                                        .Where(x => x.CategoriesGroup == CategoriesGroup.SmartPhoneAndAccessoaries)
                                                                        .Select(c => new CategoriesNavigationViewModel(c))
                                                                        .ToList();
            List <CategoriesNavigationViewModel> categoriesSmallWhiteGoods = this.categiriesService
                                                                             .GetAllCategoriesSortedByName()
                                                                             .Where(x => x.CategoriesGroup == CategoriesGroup.SmallWhiteGoods)
                                                                             .Select(c => new CategoriesNavigationViewModel(c))
                                                                             .ToList();

            var viewProducts = new List <PreviewProductViewModel>();

            foreach (var product in products)
            {
                PreviewProductViewModel viewProduct = new PreviewProductViewModel(product);
                if (viewProduct.Name.Length > Constants.ProductPreviewNameLength)
                {
                    viewProduct.Name = viewProduct.Name.Substring(0, Constants.ProductPreviewNameLength);
                    viewProduct.Name = viewProduct.Name + "...";
                }
                viewProducts.Add(viewProduct);
            }

            Pager pager = new Pager(viewProducts.Count(), page);

            IndexPageViewModel viewPageIndexModel = new IndexPageViewModel
            {
                Items = viewProducts.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
                Pager = pager
            };

            ViewData["categoriesPc"]              = viewCategoryPc;
            ViewData["categoriesSmartPhone"]      = categoriesSmartPhone;
            ViewData["categoriesSmallWhiteGoods"] = categoriesSmallWhiteGoods;
            ViewData["products"]   = viewPageIndexModel;
            ViewData["searchTerm"] = searchTerm;

            return(View());
        }
        public IActionResult ByCategory(Guid?id, int?page)
        {
            Guard.WhenArgument(id, "Category Id").IsNull().Throw();

            var products = this.productsService
                           .GetByCategory(id)
                           .OrderBy(x => x.Price)
                           .ToList();


            var currentCategory = new CategoriesNavigationViewModel(categiriesService.GetById(id));
            List <CategoriesNavigationViewModel> viewCategoryPc = this.categiriesService
                                                                  .GetAllCategoriesSortedByName()
                                                                  .Where(x => x.CategoriesGroup == CategoriesGroup.Pc)
                                                                  .Select(c => new CategoriesNavigationViewModel(c))
                                                                  .ToList();

            List <CategoriesNavigationViewModel> categoriesSmartPhone = this.categiriesService
                                                                        .GetAllCategoriesSortedByName()
                                                                        .Where(x => x.CategoriesGroup == CategoriesGroup.SmartPhoneAndAccessoaries)
                                                                        .Select(c => new CategoriesNavigationViewModel(c))
                                                                        .ToList();
            List <CategoriesNavigationViewModel> categoriesSmallWhiteGoods = this.categiriesService
                                                                             .GetAllCategoriesSortedByName()
                                                                             .Where(x => x.CategoriesGroup == CategoriesGroup.SmallWhiteGoods)
                                                                             .Select(c => new CategoriesNavigationViewModel(c))
                                                                             .ToList();


            var viewProducts = new List <PreviewProductViewModel>();

            foreach (var product in products)
            {
                PreviewProductViewModel viewProduct = new PreviewProductViewModel(product);
                if (viewProduct.Name.Length > Constants.ProductPreviewNameLength)
                {
                    viewProduct.Name = viewProduct.Name.Substring(0, Constants.ProductPreviewNameLength);
                    viewProduct.Name = viewProduct.Name + "...";
                }
                viewProducts.Add(viewProduct);
            }

            Pager pager = new Pager(viewProducts.Count(), page);

            IndexPageViewModel viewPageIndexModel = new IndexPageViewModel
            {
                Items = viewProducts.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
                Pager = pager
            };

            //IDictionary<CategoriesNavigationViewModel, int> numberOfProducts = new Dictionary<CategoriesNavigationViewModel, int>();

            //foreach (var cat in viewCategoryPc)
            //{
            //    numberOfProducts[cat] = this.productsService
            //                                .GetByCategory(cat.Id)
            //                                .Count();
            //}
            //foreach (var cat in categoriesSmartPhone)
            //{
            //    numberOfProducts[cat] = this.productsService
            //                                .GetByCategory(cat.Id)
            //                                .Count();
            //}
            //foreach (var cat in categoriesSmallWhiteGoods)
            //{
            //    numberOfProducts[cat] = this.productsService
            //                                .GetByCategory(cat.Id)
            //                                .Count();
            //}

            //ViewData["numberOfProducts"] = numberOfProducts;
            ViewData["categoriesPc"]              = viewCategoryPc;
            ViewData["categoriesSmartPhone"]      = categoriesSmartPhone;
            ViewData["categoriesSmallWhiteGoods"] = categoriesSmallWhiteGoods;
            ViewData["products"] = viewPageIndexModel;

            return(View(currentCategory));
        }