using System;
using ACG6MvcAdHcApi.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
 
namespace ACG6MvcAdHcApi.BusinessLayer
{
     /// <summary>
     /// Works like the Base interface for IProductBusinessLayer interface.
     /// **************************** Do not make changes to this interface ****************************
     /// ** Put your additional code in the IProductBusinessLayer interface under the BusinessLayer folder. **
     /// *******************************************************************************************
     /// </summary>
     public partial interface IProductBusinessLayer
     {
 
         /// <summary>
         /// Selects a record by primary key(s)
         /// </summary>
         public Task<Product> SelectByPrimaryKeyAsync(int productID);
 
         /// <summary>
         /// Gets the total number of records in the Products table
         /// </summary>
         public Task<intGetRecordCountAsync();
 
         /// <summary>
         /// Gets the total number of records in the Products table by SupplierID
         /// </summary>
         public Task<intGetRecordCountBySupplierIDAsync(intsupplierID);
 
         /// <summary>
         /// Gets the total number of records in the Products table by CategoryID
         /// </summary>
         public Task<intGetRecordCountByCategoryIDAsync(intcategoryID);
 
         /// <summary>
         /// Gets the total number of records in the Products table based on search parameters
         /// </summary>
         public Task<intGetRecordCountDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinued);
 
         /// <summary>
         /// Selects records as a collection (List) of Product sorted by the sortByExpression.
         /// </summary>
         public Task<List<Product>> SelectSkipAndTakeAsync(int rowsint startRowIndexstring sortByExpression);
 
         /// <summary>
         /// Selects records by SupplierID as a collection (List) of Product sorted by the sortByExpression starting from the startRowIndex
         /// </summary>
         public Task<List<Product>> SelectSkipAndTakeBySupplierIDAsync(int rowsint startRowIndexstring sortByExpressionintsupplierID);
 
         /// <summary>
         /// Selects records by CategoryID as a collection (List) of Product sorted by the sortByExpression starting from the startRowIndex
         /// </summary>
         public Task<List<Product>> SelectSkipAndTakeByCategoryIDAsync(int rowsint startRowIndexstring sortByExpressionintcategoryID);
 
         /// <summary>
         /// Selects records as a collection (List) of Product sorted by the sortByExpression starting from the startRowIndex, based on the search parameters
         /// </summary>
         public Task<List<Product>> SelectSkipAndTakeDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinuedint rowsint startRowIndexstring sortByExpression);
 
         /// <summary>
         /// Selects all records as a collection (List) of Product
         /// </summary>
         public Task<List<Product>> SelectAllAsync();
 
         /// <summary>
         /// Selects all records as a collection (List) of Product sorted by the sort expression
         /// </summary>
         public Task<List<Product>> SelectAllAsync(string sortByExpression);
 
         /// <summary>
         /// Selects records based on the passed filters as a collection (List) of Product.
         /// </summary>
         public Task<List<Product>> SelectAllDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinued);
 
         /// <summary>
         /// Selects records based on the passed filters as a collection (List) of Product sorted by the sort expression.
         /// </summary>
         public Task<List<Product>> SelectAllDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinuedstring sortByExpression);
 
         /// <summary>
         /// Selects ProductID and ProductName columns for use with a DropDownList web control, ComboBox, CheckedBoxList, ListView, ListBox, etc
         /// </summary>
         public Task<List<Product>> SelectProductDropDownListDataAsync();
 
         /// <summary>
         /// Sorts the List<Product >by sort expression
         /// </summary>
         public Task<List<Product>> SortByExpressionAsync(List<Product> objProductsListstring sortExpression);
 
         /// <summary>
         /// Inserts a new record
         /// </summary>
         public Task<intInsertAsync(Product objProduct);
 
         /// <summary>
         /// Updates a record
         /// </summary>
         public Task UpdateAsync(Product objProduct);
 
         /// <summary>
         /// Deletes a record based on primary key(s)
         /// </summary>
         public Task DeleteAsync(int productID);
 
         /// <summary>
         /// Deletes multiple records based on primary keys
         /// </summary>
         public Task DeleteMultipleAsync(List<Int32> productIDList);
     }
}