using Biskilog_Accounting.Shared.CustomModels ;
using Biskilog_Accounting.Shared.POSModels ;
namespace Biskilog_Accounting.Shared.Interfaces
{
public interface IAnalytics
{
/// <summary>
/// Fetches a collection of sales transaction made from the specified start date to the end date
/// </summary>
/// <param name="a_start">Specified Start Date</param>
/// <param name="a_end">Specified end Date</param>
/// <returns></returns>
IEnumerable < Tblcart > GetSalesTransaction ( DateTime a_start , DateTime a_end ) ;
/// <summary>
/// Fetches a collection of sales transaction made within a one week period
/// </summary>
/// <returns></returns>
IEnumerable < WeeklySaleItem > GetWeeklySalesTransaction ( ) ;
/// <summary>
/// Fetches a collection of in-debt customers
/// <returns></returns>
IEnumerable < CustomerAccounts > GetInDebtCustomers ( ) ;
/// <summary>
/// Fetches a collection of Product Items which are currently out of stock
/// </summary>
/// <returns></returns>
IEnumerable < ProductItem > GetOutOfStockItems ( ) ;
/// <summary>
/// Fetches a collection of the most purchased Product Items within a specified date range
/// </summary>
/// <param name="a_start"></param>
/// <param name="a_end"></param>
/// <returns></returns>
IEnumerable < MostPurchasedItem > GetMostPurchasedItem ( DateTime a_start , DateTime a_end ) ;
/// <summary>
/// Fetches a collection of cancelled transaction within a specified date range
/// </summary>
/// <param name="a_start"></param>
/// <param name="a_end"></param>
/// <returns></returns>
IEnumerable < CancelledSales > GetCancelledSales ( DateTime a_start , DateTime a_end ) ;
/// <summary>
/// Fetches a collection of transaction made by employees within a specified date range
/// </summary>
/// <param name="a_start"></param>
/// <param name="a_end"></param>
/// <returns>A dictionary of transactions made by employees with employee name as key</returns>
Dictionary < string , List < SaleItem > > GetEmployeeSales ( DateTime a_start , DateTime a_end ) ;
/// <summary>
/// Fetches a collection of product price changes with a specified date range
/// </summary>
/// <param name="a_start"></param>
/// <param name="a_end"></param>
/// <returns></returns>
IEnumerable < ProductPriceChange > GetPriceChanges ( DateTime a_start , DateTime a_end ) ;
/// <summary>
/// Fetch the trade summary which is made of the total sales made currently and previous trade
/// </summary>
/// <returns></returns>
TradeSummary GetTradeSummary ( ) ;
/// <summary>
/// Fetches the most recent sales transactions
/// </summary>
/// <param name="a_limit">The number of rows to return </param>
/// <returns></returns>
IEnumerable < SaleItem > GetRecentSales ( int a_limit ) ;
/// <summary>
/// Fetches a collection of product price changes recently made
/// </summary>
/// <param name="a_limit">the number of rows to return</param>
/// <returns></returns>
IEnumerable < ProductPriceChange > GetRecentPriceChanges ( int a_limit ) ;
/// <summary>
/// Fetches a collection of price change history per product
/// </summary>
/// <param name="a_limit">the number of products to fetch history</param>
/// <returns></returns>
IEnumerable < ProductPriceChange > GetProductPriceChangeHistory ( int a_limit ) ;
/// <summary>
/// Fetches a collection of sales transaction grouped by category made within a one week period
/// </summary>
/// <returns></returns>
IEnumerable < WeeklyCategorySummary > GetWeeklySalesCategoryTransaction ( int a_limit ) ;
}
}