using Grand.Domain.Customers;

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

public interface ICustomerGroupProductService
{
    /// <summary>
    ///     Gets customer groups products for customer group
    /// </summary>
    /// <param name="customerGroupId">Customer group id</param>
    /// <returns>Customer group products</returns>
    Task<IList<CustomerGroupProduct>> GetCustomerGroupProducts(string customerGroupId);

    /// <summary>
    ///     Gets customer groups products for customer group
    /// </summary>
    /// <param name="customerGroupId">Customer group id</param>
    /// <param name="productId">Product id</param>
    /// <returns>Customer group product</returns>
    Task<CustomerGroupProduct> GetCustomerGroupProduct(string customerGroupId, string productId);

    /// <summary>
    ///     Gets customer groups product
    /// </summary>
    /// <param name="id">id</param>
    /// <returns>Customer group product</returns>
    Task<CustomerGroupProduct> GetCustomerGroupProductById(string id);

    /// <summary>
    ///     Inserts a customer group product
    /// </summary>
    /// <param name="customerGroupProduct">Customer group product</param>
    Task InsertCustomerGroupProduct(CustomerGroupProduct customerGroupProduct);

    /// <summary>
    ///     Updates the customer group product
    /// </summary>
    /// <param name="customerGroupProduct">Customer group product</param>
    Task UpdateCustomerGroupProduct(CustomerGroupProduct customerGroupProduct);

    /// <summary>
    ///     Delete a customer group product
    /// </summary>
    /// <param name="customerGroupProduct">Customer group product</param>
    Task DeleteCustomerGroupProduct(CustomerGroupProduct customerGroupProduct);
}