public async Task<CategoryViewModel> GetCategoriesAsync(long? categoryId = null, int levels = 1)
        {
            CategoryViewModel result;

            if (categoryId.HasValue)
            {
                var category = await _catalogApi.GetCategoryAsync(_catalogApi.GetCategoryUri(categoryId.Value)).ConfigureAwait(false);
                if (category == null)
                {
                    result = null;
                }
                else
                {
                    var parent = CreateCategoryViewModel(category, category.Id);
                    await GenerateChildCategoryViewModels(parent, category.Categories, levels).ConfigureAwait(false);
                    result = parent;
                }
            }
            else
            {
                var categories = await _catalogApi.GetCategoriesAsync().ConfigureAwait(false);

                var categoryViewModel = new CategoryViewModel
                {
                    CategoryId = 0,
                    DisplayName = "Root",
                    Image = string.Empty
                };

                await GenerateChildCategoryViewModels(categoryViewModel, categories, levels).ConfigureAwait(false);

                result = categoryViewModel;
            }

            return result;
        }
        private async Task GenerateChildCategoryViewModels(CategoryViewModel categoryViewModel,
            Categories categories, int levelsRemaining)
        {
            if (levelsRemaining <= 0 || categories == null || categories.Category == null) return;

            foreach (var item in categories.Category)
            {
                var currentCategory = await _catalogApi.GetCategoryAsync(item).ConfigureAwait(false);
                var itemViewModel = CreateCategoryViewModel(currentCategory, currentCategory.Id);
                categoryViewModel.Items.Add(itemViewModel);
                await GenerateChildCategoryViewModels(itemViewModel, currentCategory.Categories, levelsRemaining - 1).ConfigureAwait(false);
            }
        }