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

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

public interface IProductCategoryService
{
    /// <summary>
    ///     Gets product category mapping collection
    /// </summary>
    /// <param name="categoryId">Category 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 a category mapping collection</returns>
    Task<IPagedList<ProductsCategory>> GetProductCategoriesByCategoryId(string categoryId,
        int pageIndex = 0, int pageSize = int.MaxValue, bool showHidden = false);

    /// <summary>
    ///     Inserts a mapping for product category
    /// </summary>
    /// <param name="productCategory">>Product category mapping</param>
    /// <param name="productId">Product id</param>
    Task InsertProductCategory(ProductCategory productCategory, string productId);

    /// <summary>
    ///     Updates a mapping for product category
    /// </summary>
    /// <param name="productCategory">>Product category mapping</param>
    /// <param name="productId">Product id</param>
    Task UpdateProductCategory(ProductCategory productCategory, string productId);

    /// <summary>
    ///     Deletes a mapping for product category
    /// </summary>
    /// <param name="productCategory">Product category</param>
    /// <param name="productId">Product id</param>
    Task DeleteProductCategory(ProductCategory productCategory, string productId);
}