public IViewComponentResult Invoke()
        {
            var    locale  = Request.HttpContext.Features.Get <IRequestCultureFeature>();
            string culture = locale.RequestCulture.UICulture.ToString();

            try
            {
                var topCatesDb  = _topCategoryRepo.GetAllTopCates().ToList();
                var topCateDtos = new List <TopCategoryComponentDto>();
                ViewBag.culture = culture;

                switch (culture)
                {
                case "tr":
                    foreach (var topCate in topCatesDb.OrderBy(x => x.NameTR))
                    {
                        TopCategoryComponentDto topDto = new TopCategoryComponentDto();
                        topDto.Id                 = topCate.Id;
                        topDto.Name               = topCate.NameTR;
                        topDto.HeadDescription    = topCate.HeadDescriptionTR;
                        topDto.HeadTitle          = topCate.HeadTitleTR;
                        topDto.TopCategoryNameUrl = topCate.TopCategoryNameUrlTR;
                        if (topCate.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var middleCate in topCate.MiddleCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameTR))
                            {
                                MiddleCategoryComponentDto middleDto = new MiddleCategoryComponentDto();
                                middleDto.Id                    = middleCate.Id;
                                middleDto.Name                  = middleCate.NameTR;
                                middleDto.HeadDescription       = middleCate.HeadDescriptionTR;
                                middleDto.HeadTitle             = middleCate.HeadTitleTR;
                                middleDto.TopCategoryId         = topCate.Id;
                                middleDto.MiddleCategoryNameUrl = middleCate.MiddleCategoryNameUrlTR;
                                if (middleCate.SubCategories.Any(x => !x.IsDeleted))
                                {
                                    foreach (var subCate in middleCate.SubCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameTR))
                                    {
                                        SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                        subDto.Id                 = subCate.Id;
                                        subDto.Name               = subCate.NameTR;
                                        subDto.HeadDescription    = subCate.HeadDescriptionTR;
                                        subDto.HeadTitle          = subCate.HeadTitleTR;
                                        subDto.MiddleCategoryId   = middleCate.Id;
                                        subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlTR;
                                        middleDto.SubCategoryComponentDtos.Add(subDto);
                                    }
                                }

                                topDto.MiddleCategoryComponentDtos.Add(middleDto);
                            }
                        }

                        topCateDtos.Add(topDto);
                    }
                    break;

                case "en":
                    foreach (var topCate in topCatesDb.OrderBy(x => x.NameEN))
                    {
                        TopCategoryComponentDto topDto = new TopCategoryComponentDto();
                        topDto.Id                 = topCate.Id;
                        topDto.Name               = topCate.NameEN;
                        topDto.HeadDescription    = topCate.HeadDescriptionEN;
                        topDto.HeadTitle          = topCate.HeadTitleEN;
                        topDto.TopCategoryNameUrl = topCate.TopCategoryNameUrlEN;
                        if (topCate.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var middleCate in topCate.MiddleCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameEN))
                            {
                                MiddleCategoryComponentDto middleDto = new MiddleCategoryComponentDto();
                                middleDto.Id                    = middleCate.Id;
                                middleDto.Name                  = middleCate.NameEN;
                                middleDto.HeadDescription       = middleCate.HeadDescriptionEN;
                                middleDto.HeadTitle             = middleCate.HeadTitleEN;
                                middleDto.TopCategoryId         = topCate.Id;
                                middleDto.MiddleCategoryNameUrl = middleCate.MiddleCategoryNameUrlEN;

                                if (middleCate.SubCategories.Any(x => !x.IsDeleted))
                                {
                                    foreach (var subCate in middleCate.SubCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameEN))
                                    {
                                        SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                        subDto.Id                 = subCate.Id;
                                        subDto.Name               = subCate.NameEN;
                                        subDto.HeadDescription    = subCate.HeadDescriptionEN;
                                        subDto.HeadTitle          = subCate.HeadTitleEN;
                                        subDto.MiddleCategoryId   = middleCate.Id;
                                        subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlEN;
                                        middleDto.SubCategoryComponentDtos.Add(subDto);
                                    }
                                }

                                topDto.MiddleCategoryComponentDtos.Add(middleDto);
                            }
                        }

                        topCateDtos.Add(topDto);
                    }
                    break;

                case "ru":
                    foreach (var topCate in topCatesDb.OrderBy(x => x.NameRU))
                    {
                        TopCategoryComponentDto topDto = new TopCategoryComponentDto();
                        topDto.Id                 = topCate.Id;
                        topDto.Name               = topCate.NameRU;
                        topDto.HeadDescription    = topCate.HeadDescriptionRU;
                        topDto.HeadTitle          = topCate.HeadTitleRU;
                        topDto.TopCategoryNameUrl = topCate.TopCategoryNameUrlRU;

                        if (topCate.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var middleCate in topCate.MiddleCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameRU))
                            {
                                MiddleCategoryComponentDto middleDto = new MiddleCategoryComponentDto();
                                middleDto.Id                    = middleCate.Id;
                                middleDto.Name                  = middleCate.NameRU;
                                middleDto.HeadDescription       = middleCate.HeadDescriptionRU;
                                middleDto.HeadTitle             = middleCate.HeadTitleRU;
                                middleDto.TopCategoryId         = topCate.Id;
                                middleDto.MiddleCategoryNameUrl = middleCate.MiddleCategoryNameUrlRU;

                                if (middleCate.SubCategories.Any(x => !x.IsDeleted))
                                {
                                    foreach (var subCate in middleCate.SubCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameRU))
                                    {
                                        SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                        subDto.Id                 = subCate.Id;
                                        subDto.Name               = subCate.NameRU;
                                        subDto.HeadDescription    = subCate.HeadDescriptionRU;
                                        subDto.HeadTitle          = subCate.HeadTitleRU;
                                        subDto.MiddleCategoryId   = middleCate.Id;
                                        subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlRU;
                                        middleDto.SubCategoryComponentDtos.Add(subDto);
                                    }
                                }

                                topDto.MiddleCategoryComponentDtos.Add(middleDto);
                            }
                        }

                        topCateDtos.Add(topDto);
                    }
                    break;

                default:
                    foreach (var topCate in topCatesDb.OrderBy(x => x.NameEN))
                    {
                        TopCategoryComponentDto topDto = new TopCategoryComponentDto();
                        topDto.Id                 = topCate.Id;
                        topDto.Name               = topCate.NameEN;
                        topDto.HeadDescription    = topCate.HeadDescriptionEN;
                        topDto.HeadTitle          = topCate.HeadTitleEN;
                        topDto.TopCategoryNameUrl = topCate.TopCategoryNameUrlEN;

                        if (topCate.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var middleCate in topCate.MiddleCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameEN))
                            {
                                MiddleCategoryComponentDto middleDto = new MiddleCategoryComponentDto();
                                middleDto.Id                    = middleCate.Id;
                                middleDto.Name                  = middleCate.NameEN;
                                middleDto.HeadDescription       = middleCate.HeadDescriptionEN;
                                middleDto.HeadTitle             = middleCate.HeadTitleEN;
                                middleDto.TopCategoryId         = topCate.Id;
                                middleDto.MiddleCategoryNameUrl = middleCate.MiddleCategoryNameUrlEN;

                                if (middleCate.SubCategories.Any(x => !x.IsDeleted))
                                {
                                    foreach (var subCate in middleCate.SubCategories.Where(x => !x.IsDeleted).OrderBy(x => x.NameEN))
                                    {
                                        SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                        subDto.Id                 = subCate.Id;
                                        subDto.Name               = subCate.NameEN;
                                        subDto.HeadDescription    = subCate.HeadDescriptionEN;
                                        subDto.HeadTitle          = subCate.HeadTitleEN;
                                        subDto.MiddleCategoryId   = middleCate.Id;
                                        subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlEN;
                                        middleDto.SubCategoryComponentDtos.Add(subDto);
                                    }
                                }

                                topDto.MiddleCategoryComponentDtos.Add(middleDto);
                            }
                        }

                        topCateDtos.Add(topDto);
                    }
                    break;
                }
                return(View(topCateDtos));
            }
            catch (Exception e)
            {
                _errorRepo.CreateEntity(new ErrorLog
                {
                    ErrorLocation = "CategoryNavbarComponent",
                    ErrorDetail   = e.Message + " , " + e.InnerException,
                    ErrorUrl      = HttpContext.Request.Path,
                    Culture       = culture
                });
                return(null);
            }
        }
        public IViewComponentResult Invoke(string categoryType, int id)
        {
            var    locale  = Request.HttpContext.Features.Get <IRequestCultureFeature>();
            string culture = locale.RequestCulture.UICulture.ToString();

            try
            {
                CategorySidebarDto dto = new CategorySidebarDto();
                ViewBag.filter = culture.Equals("tr") ? "Filtre" : culture.Equals("ru") ? "фильтр" : "Filter";
                switch (culture)
                {
                case "tr":
                    if (categoryType.Equals("top"))
                    {
                        var categoryTop = _topCategoryRepo.GetTopCateById(id);

                        if (categoryTop.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var midCate in categoryTop.MiddleCategories.Where(x => !x.IsDeleted))
                            {
                                MiddleCategoryComponentDto midDto = new MiddleCategoryComponentDto();
                                midDto.Id   = midCate.Id;
                                midDto.Name = midCate.NameTR;
                                midDto.MiddleCategoryNameUrl = midCate.MiddleCategoryNameUrlTR;
                                midDto.TopCategoryId         = midCate.TopCategoryId;
                                midDto.CategoryHref          = $"/tr/kategoriler/{midCate.TopCategory.TopCategoryNameUrlTR}/{midCate.MiddleCategoryNameUrlTR}/sayfa/1";
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                                dto.TopCategoryId = midCate.Id;
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                            }
                        }
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryTop.NameTR;
                        return(View(dto));
                    }
                    else if (categoryType.Equals("mid"))
                    {
                        var categoryMid = _middleCategoryRepo.GetMidCateById(id);

                        if (categoryMid.SubCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var subCate in categoryMid.SubCategories.Where(x => !x.IsDeleted))
                            {
                                SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                subDto.Id   = subCate.Id;
                                subDto.Name = subCate.NameTR;
                                subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlTR;
                                subDto.MiddleCategoryId   = subCate.MiddleCategoryId;
                                subDto.CategoryHref       = $"/tr/kategoriler/{subCate.MiddleCategory.TopCategory.TopCategoryNameUrlTR}/{subCate.MiddleCategory.MiddleCategoryNameUrlTR}/{subCate.SubCategoryNameUrlTR}/sayfa/1";
                                dto.SubCategoryComponentDtos.Add(subDto);
                                dto.TopCategoryId = categoryMid.TopCategoryId;
                                dto.SubCategoryComponentDtos.Add(subDto);
                            }
                        }

                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryMid.NameTR;
                        return(View(dto));
                    }
                    else
                    {
                        var categorySub = _subCategoryRepo.FindEntity(x => !x.IsDeleted && x.Id == id);
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categorySub.NameTR;
                        return(View(dto));
                    }

                case "en":
                    if (categoryType.Equals("top"))
                    {
                        var categoryTop = _topCategoryRepo.GetTopCateById(id);
                        if (categoryTop.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var midCate in categoryTop.MiddleCategories.Where(x => !x.IsDeleted))
                            {
                                MiddleCategoryComponentDto midDto = new MiddleCategoryComponentDto();
                                midDto.Id   = midCate.Id;
                                midDto.Name = midCate.NameEN;
                                midDto.MiddleCategoryNameUrl = midCate.MiddleCategoryNameUrlEN;
                                midDto.TopCategoryId         = midCate.TopCategoryId;
                                midDto.CategoryHref          = $"/en/categories/{midCate.TopCategory.TopCategoryNameUrlEN}/{midCate.MiddleCategoryNameUrlEN}/page/1";
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                                dto.TopCategoryId = midCate.Id;
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                            }
                        }
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryTop.NameEN;
                        return(View(dto));
                    }
                    else if (categoryType.Equals("mid"))
                    {
                        var categoryMid = _middleCategoryRepo.GetMidCateById(id);
                        if (categoryMid.SubCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var subCate in categoryMid.SubCategories.Where(x => !x.IsDeleted))
                            {
                                SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                subDto.Id   = subCate.Id;
                                subDto.Name = subCate.NameEN;
                                subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlEN;
                                subDto.MiddleCategoryId   = subCate.MiddleCategoryId;
                                subDto.CategoryHref       = $"/en/categories/{subCate.MiddleCategory.TopCategory.TopCategoryNameUrlEN}/{subCate.MiddleCategory.MiddleCategoryNameUrlEN}/{subCate.SubCategoryNameUrlEN}/page/1";
                                dto.SubCategoryComponentDtos.Add(subDto);
                                dto.TopCategoryId = categoryMid.TopCategoryId;
                                dto.SubCategoryComponentDtos.Add(subDto);
                            }
                        }

                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryMid.NameEN;
                        return(View(dto));
                    }
                    else
                    {
                        var categorySub = _subCategoryRepo.FindEntity(x => !x.IsDeleted && x.Id == id);
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categorySub.NameEN;
                        return(View(dto));
                    }

                case "ru":
                    if (categoryType.Equals("top"))
                    {
                        var categoryTop = _topCategoryRepo.GetTopCateById(id);
                        if (categoryTop.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var midCate in categoryTop.MiddleCategories.Where(x => !x.IsDeleted))
                            {
                                MiddleCategoryComponentDto midDto = new MiddleCategoryComponentDto();
                                midDto.Id   = midCate.Id;
                                midDto.Name = midCate.NameRU;
                                midDto.MiddleCategoryNameUrl = midCate.MiddleCategoryNameUrlRU;
                                midDto.TopCategoryId         = midCate.TopCategoryId;
                                midDto.CategoryHref          = $"/ru/categories/{midCate.TopCategory.TopCategoryNameUrlRU}/{midCate.MiddleCategoryNameUrlRU}/page/1";
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                                dto.TopCategoryId = midCate.Id;
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                            }
                        }
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryTop.NameRU;
                        return(View(dto));
                    }
                    else if (categoryType.Equals("mid"))
                    {
                        var categoryMid = _middleCategoryRepo.GetMidCateById(id);
                        if (categoryMid.SubCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var subCate in categoryMid.SubCategories.Where(x => !x.IsDeleted))
                            {
                                SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                subDto.Id   = subCate.Id;
                                subDto.Name = subCate.NameRU;
                                subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlRU;
                                subDto.MiddleCategoryId   = subCate.MiddleCategoryId;
                                subDto.CategoryHref       = $"/ru/categories/{subCate.MiddleCategory.TopCategory.TopCategoryNameUrlRU}/{subCate.MiddleCategory.MiddleCategoryNameUrlRU}/{subCate.SubCategoryNameUrlRU}/page/1";
                                dto.SubCategoryComponentDtos.Add(subDto);
                                dto.TopCategoryId = categoryMid.TopCategoryId;
                                dto.SubCategoryComponentDtos.Add(subDto);
                            }
                        }

                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryMid.NameRU;
                        return(View(dto));
                    }
                    else
                    {
                        var categorySub = _subCategoryRepo.FindEntity(x => !x.IsDeleted && x.Id == id);
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categorySub.NameRU;
                        return(View(dto));
                    }

                default:
                    if (categoryType.Equals("top"))
                    {
                        var categoryTop = _topCategoryRepo.GetTopCateById(id);
                        if (categoryTop.MiddleCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var midCate in categoryTop.MiddleCategories.Where(x => !x.IsDeleted))
                            {
                                MiddleCategoryComponentDto midDto = new MiddleCategoryComponentDto();
                                midDto.Id   = midCate.Id;
                                midDto.Name = midCate.NameEN;
                                midDto.MiddleCategoryNameUrl = midCate.MiddleCategoryNameUrlEN;
                                midDto.TopCategoryId         = midCate.TopCategoryId;
                                midDto.CategoryHref          = $"/en/categories/{midCate.TopCategory.TopCategoryNameUrlEN}/{midCate.MiddleCategoryNameUrlEN}/page/1";
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                                dto.TopCategoryId = midCate.Id;
                                dto.MiddleCategoryComponentDtos.Add(midDto);
                            }
                        }

                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryTop.NameEN;
                        return(View(dto));
                    }
                    else if (categoryType.Equals("mid"))
                    {
                        var categoryMid = _middleCategoryRepo.GetMidCateById(id);
                        if (categoryMid.SubCategories.Any(x => !x.IsDeleted))
                        {
                            foreach (var subCate in categoryMid.SubCategories.Where(x => !x.IsDeleted))
                            {
                                SubCategoryComponentDto subDto = new SubCategoryComponentDto();
                                subDto.Id   = subCate.Id;
                                subDto.Name = subCate.NameEN;
                                subDto.SubCategoryNameUrl = subCate.SubCategoryNameUrlEN;
                                subDto.MiddleCategoryId   = subCate.MiddleCategoryId;
                                subDto.CategoryHref       = $"/en/categories/{subCate.MiddleCategory.TopCategory.TopCategoryNameUrlEN}/{subCate.MiddleCategory.MiddleCategoryNameUrlEN}/{subCate.SubCategoryNameUrlEN}/page/1";
                                dto.SubCategoryComponentDtos.Add(subDto);
                                dto.TopCategoryId = categoryMid.TopCategoryId;
                                dto.SubCategoryComponentDtos.Add(subDto);
                            }
                        }

                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categoryMid.NameEN;
                        return(View(dto));
                    }
                    else
                    {
                        var categorySub = _subCategoryRepo.FindEntity(x => !x.IsDeleted && x.Id == id);
                        dto.CategoryType   = categoryType;
                        dto.ComponentTitle = categorySub.NameEN;
                        return(View(dto));
                    }
                }
            }
            catch (Exception e)
            {
                _errorRepo.CreateEntity(new ErrorLog
                {
                    ErrorLocation = "CategorySidebarComponent",
                    ErrorDetail   = e.Message + " , " + e.InnerException,
                    ErrorUrl      = HttpContext.Request.Path,
                    Culture       = culture
                });
                return(null);
            }
        }