using ACG6MvcAdHcApi.Models;
using System;
using System.Data;
using System.Threading.Tasks;
 
namespace ACG6MvcAdHcApi.DataRepository
{
     /// <summary>
     /// Works like the Base interface for IProductRepository interface.
     /// **************************** Do not make changes to this interface ****************************
     /// ** Put your additional code in the IProductRepository interface under the DataRepository folder. **
     /// ***********************************************************************************************
     /// </summary>
     public partial interface IProductRepository
     {
         /// <summary>
         /// Selects a record by primary key(s)
         /// </summary>
         internal Task<DataTable> SelectByPrimaryKeyAsync(int productID);
 
         /// <summary>
         /// Gets the total number of records in the Products table
         /// </summary>
         internal Task<intGetRecordCountAsync();
 
         /// <summary>
         /// Gets the total number of records in the Products table by SupplierID
         /// </summary>
         internal Task<intGetRecordCountBySupplierIDAsync(intsupplierID);
 
         /// <summary>
         /// Gets the total number of records in the Products table by CategoryID
         /// </summary>
         internal Task<intGetRecordCountByCategoryIDAsync(intcategoryID);
 
         /// <summary>
         /// Gets the total number of records in the Products table based on search parameters
         /// </summary>
         internal Task<intGetRecordCountDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinued);
 
         /// <summary>
         /// Selects Products table records sorted by the sortByExpression and returns records from the startRowIndex with rows (# of rows)
         /// </summary>
         internal Task<DataTable> SelectSkipAndTakeAsync(string sortByExpressionint startRowIndexint rows);
 
         /// <summary>
         /// Selects records by SupplierID as a collection (List) of Products sorted by the sortByExpression.
         /// </summary>
         internal Task<DataTable> SelectSkipAndTakeBySupplierIDAsync(string sortByExpressionint startRowIndexint rowsintsupplierID);
 
         /// <summary>
         /// Selects records by CategoryID as a collection (List) of Products sorted by the sortByExpression.
         /// </summary>
         internal Task<DataTable> SelectSkipAndTakeByCategoryIDAsync(string sortByExpressionint startRowIndexint rowsintcategoryID);
 
         /// <summary>
         /// Selects Products table records sorted by the sortByExpression and returns records from the startRowIndex with rows (# of records) based on search parameters
         /// </summary>
         internal Task<DataTable> SelectSkipAndTakeDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinuedstring sortByExpressionint startRowIndexint rows);
 
         /// <summary>
         /// Selects all Products
         /// </summary>
         internal Task<DataTable> SelectAllAsync();
 
         /// <summary>
         /// Selects records based on the passed filters as a collection (List) of Products.
         /// </summary>
         internal Task<DataTable> SelectAllDynamicWhereAsync(intproductIDstring productNameintsupplierIDintcategoryIDstring quantityPerUnitdecimalunitPrice, Int16? unitsInStock, Int16? unitsOnOrder, Int16? reorderLevelbooldiscontinued);
 
         /// <summary>
         /// Selects all Products by Suppliers, related to column SupplierID
         /// </summary>
         internal Task<DataTable> SelectProductCollectionBySupplierIDAsync(int supplierID);
 
         /// <summary>
         /// Selects all Products by Categories, related to column CategoryID
         /// </summary>
         internal Task<DataTable> SelectProductCollectionByCategoryIDAsync(int categoryID);
 
         /// <summary>
         /// Selects ProductID and ProductName columns for use with a DropDownList web control
         /// </summary>
         internal Task<DataTable> SelectProductDropDownListDataAsync();
 
         /// <summary>
         /// Deletes a record based on primary key(s)
         /// </summary>
         internal Task DeleteAsync(int productID);
 
         /// <summary>
         /// Inserts a record
         /// </summary>
         internal Task<intInsertAsync(Product objProduct);
 
         /// <summary>
         /// Updates a record
         /// </summary>
         internal Task UpdateAsync(Product objProduct);
     }
}