using Grand.Business.Core.Utilities.Catalog;
using Grand.Domain;
using Grand.Domain.Catalog;

namespace Grand.Business.Core.Interfaces.Catalog.Collections;

public interface IProductCollectionService
{
    /// <summary>
    ///     Gets product collection by collection id
    /// </summary>
    /// <param name="collectionId">Collection id</param>
    /// <param name="storeId">Store id</param>
    /// <param name="pageIndex">Page index</param>
    /// <param name="pageSize">Page size</param>
    /// <param name="showHidden">A value that indicates if it should shows hidden records</param>
    /// <returns>Product collection collection</returns>
    Task<IPagedList<ProductsCollection>> GetProductCollectionsByCollectionId(string collectionId, string storeId,
        int pageIndex = 0, int pageSize = int.MaxValue, bool showHidden = false);


    /// <summary>
    ///     Inserts a new product collection mapping
    /// </summary>
    /// <param name="productCollection">Product collection mapping</param>
    /// <param name="productId">Product ident</param>
    Task InsertProductCollection(ProductCollection productCollection, string productId);

    /// <summary>
    ///     Updates the existing product collection mapping
    /// </summary>
    /// <param name="productCollection">Product collection mapping</param>
    /// <param name="productId">Product id</param>
    Task UpdateProductCollection(ProductCollection productCollection, string productId);

    /// <summary>
    ///     Deletes the existing product collection mapping
    /// </summary>
    /// <param name="productCollection">Product collection mapping</param>
    /// <param name="productId">Product id</param>
    Task DeleteProductCollection(ProductCollection productCollection, string productId);
}