using Microsoft.AspNetCore.Mvc;
using Nop.Core;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.Orders;
using Nop.Plugin.Misc.AuctionPlugin.Domains;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
using Nop.Services.Orders;
namespace Nop.Plugin.Misc.AuctionPlugin.Services;
///
/// Store pickup point service interface
///
public interface IAuctionService
{
//decimal GetStepAmount(decimal currentPrice);
Task UpdateProductToAuctionStatusIfValidAsync(AuctionStatus newProductToAuctionStatus, Auction auction, ProductToAuctionMapping productToAuction, Customer customer, bool updateInDatabase = true);
Task<(Auction auction, ProductToAuctionMapping productToAuction, ResponseType responseType)> GetAndUpdateProductToAuctionStatusIfValidAsync(int productToAuctionId, AuctionStatus newProductToAuctionStatus, Customer customer);
Task ResetProductToAuction(ProductToAuctionMapping productToAuction, int? categoryId = null);
Task UpdateProductCategoryIsFeaturedAsync(int productId, int? categoryId, bool isFeatured);
bool IsValidRequestAuctionStatus(AuctionStatus newStatus, AuctionStatus oldStatus);
///
/// Gets all bids
///
/// The store identifier; pass 0 to load all records
/// Page index
/// Page size
///
/// A task that represents the asynchronous operation
/// The task result contains the bids
///
Task> GetAllBidsAsync(int customerId = 0, int pageIndex = 0, int pageSize = int.MaxValue);
Task GetBidsCountByProductToAuctionIdAsync(int productToAuctionId);
Task> GetAllLastBidByAuctionIdAsync(int auctionId);
Task> GetAllLastBidDictionaryByAuctionIdAsync(int auctionId);
Task HasBidByProductToAuctionIdAsync(int productToAuctionId);
Task GetBidByIdAsync(int bidId);
Task InsertBidAsync(AuctionBid auctionBid);
Task UpdateBidAsync(AuctionBid auctionBid);
Task DeleteBidAsync(AuctionBid pickupPoint);
Task InsertAuctionAsync(Auction auction);
Task UpdateAuctionAsync(Auction auction);
Task> GetAllAuctionsAsync();
Task> GetAllCurrentAutoOpenAndClosedAuctionsAsync();
Task GetAuctionDtoWithAuctionBids(int auctionId, bool activeProductOnly, int maxBidsCount);
Task> GetProductToAuctionsByAuctionIdAsync(int auctionId, bool onlyActiveItems);
Task GetNextProductToAuctionByAuctionIdAsync(int auctionId);
Task> GetNotClosedProductToAuctionsByAuctionId(int auctionId);
Task GetAuctionByIdAsync(int auctionId);
Task GetAuctionDtoByIdAsync(int auctionId, bool widthProducts, bool activeProductOnly);
Task> GetProductToAuctionDtosByAuctionId(int auctionId, bool activeProductOnly);
Task> GetProductToAuctionDtosByProductIdAsync(int productId);
Task GetAuctionDtoWithProductByIdAsync(int auctionId, int productId, bool activeProductOnly);
Task GetProductToAuctionDtoByIdAsync(int productToAuctionId);
Task GetAuctionBidDtoByIdAsync(int auctionBidId);
Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId, int sortIndex);
Task> GetProductToAuctionsByProductIdAsync(int productId);
Task> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId, bool activeProductOnly);
Task GetProductToAuctionMappingByIdAsync(int productToAuctionMappingId);
Task UpdateProductToAuctionAsync(ProductToAuctionMapping productToAuctionMapping);
Task UpdateProductToAuctionAsync(IList productToAuctionMappings);
Task CreateOrderForWinnerAsync(ProductToAuctionMapping productToAuctionMapping);
}