using Grand.Business.Core.Interfaces.Catalog.Products;
using Grand.Domain;
using Grand.Domain.Catalog;

namespace Grand.Web.Common.Extensions;

public static class ProductList
{
    public static async Task<IPagedList<Product>> PrepareProductList(this IProductService productService,
        string searchCategoryId,
        string searchBrandId, string searchCollectionId, string searchStoreId, string searchVendorId, int productTypeId,
        string searchProductName, int pageIndex, int pageSize)
    {
        var searchCategoryIds = new List<string>();
        if (!string.IsNullOrEmpty(searchCategoryId))
            searchCategoryIds.Add(searchCategoryId);

        var products = (await productService.SearchProducts(
            categoryIds: searchCategoryIds,
            brandId: searchBrandId,
            collectionId: searchCollectionId,
            storeId: searchStoreId,
            vendorId: searchVendorId,
            productType: productTypeId > 0 ? (ProductType?)productTypeId : null,
            keywords: searchProductName,
            pageIndex: pageIndex - 1,
            pageSize: pageSize,
            showHidden: true
        )).products;

        return products;
    }
}