using DiplomovaPrace.Contracts.Customer;
using DiplomovaPrace.Contracts.Customer.Orders;
using DiplomovaPrace.Contracts.Customer.Orders.InputModels;
using DiplomovaPrace.Contracts.Customer.Orders.ViewModels;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace DiplomovaPrace.Facades.Customer.Orders
{
	public interface IOrderFacade
	{
		Task<NewOrderVM> CreateOrderAsync(OrderIM inputModel);

		Task<ShoppingCartItemsAmountVM> AddOrderItemAsync(int userID, OrderItemIM orderItem);

		Task<ShoppingCartItemsAmountVM> DeleteOrderItemAsync(int userID, OrderItemIM orderItem);

		Task<List<DeliveryTypeVM>> GetDeliveryTypesAsync();

		Task<List<PaymentTypeVM>> GetPaymentTypesAsync();

		Task<PagedQueryResult<OrderVM>> GetPagedOrdersAsync(PagedQueryRequest<OrderListQueryFilter> orderListRequest);

		Task<OrderDetailVM> GetUserOrderDetailAsync(int orderID, int userID);

		Task<ShoppingCartItemsAmountVM> GetUserShoppingCartItemsAmountAsync(int userID);

		Task<List<ShoppingCartItemVM>> GetUserShoppingCartItemsAsync(int userID);

		Task<ShoppingCartItemsAmountVM> RemoveOrderItemAsync(int userID, OrderItemIM orderItem);
	}
}
