using System.Collections.Generic;
using System.ServiceModel;
using System.Threading.Tasks;
using DiplomovaPrace.Contracts.Products.InputModels;
using DiplomovaPrace.Contracts.Products.ViewModels;

namespace DiplomovaPrace.Contracts.Products
{
	[ServiceContract]
	public interface IProductFacadeContract
	{
		Task<ProductDto> CreateProductAsync(ProductIM inputModel);

		Task<PagedQueryResult<ProductDto>> GetProductListAsync(PagedQueryRequest<ProductListQueryFilter> productListRequest);

		Task<ProductDto> GetProductAsync(GetProductRequest request);

		Task<List<ProductDto>> GetAllProductsAsync();

		Task UpdateProductAsync(ProductDto inputModel);

		Task<DeleteProductResult> DeleteProductAsync(DeleteProductRequest request);

		Task<ProductImageVM> UploadProductImageAsync(ProductImageIM inputModel);

		Task<DeleteProductImageResult> DeleteProductImageAsync(DeleteProductImageRequest request);
	}
}
