using Grand.Domain.Orders;
using Grand.Web.Admin.Models.Orders;

namespace Grand.Web.Admin.Interfaces;

public interface IGiftVoucherViewModelService
{
    GiftVoucherListModel PrepareGiftVoucherListModel();
    Task<GiftVoucherModel> PrepareGiftVoucherModel(GiftVoucherModel model = null);

    Task<(IEnumerable<GiftVoucherModel> giftVoucherModels, int totalCount)> PrepareGiftVoucherModel(
        GiftVoucherListModel model, int pageIndex, int pageSize);

    Task<GiftVoucherModel> FillGiftVoucherModel(GiftVoucher giftVoucher, GiftVoucherModel model);
    Task NotifyRecipient(GiftVoucher giftVoucher);
    Task<Order> GetOrderFromGiftVoucher(GiftVoucher giftVoucher);
    Task<GiftVoucher> InsertGiftVoucherModel(GiftVoucherModel model);
    Task<GiftVoucher> UpdateGiftVoucherModel(GiftVoucher giftVoucher, GiftVoucherModel model);
    Task DeleteGiftVoucher(GiftVoucher giftVoucher);
    Task<GiftVoucherModel> PrepareGiftVoucherModel(GiftVoucher giftVoucher);

    Task<(IEnumerable<GiftVoucherModel.GiftVoucherUsageHistoryModel> giftVoucherUsageHistoryModels, int totalCount)>
        PrepareGiftVoucherUsageHistoryModels(GiftVoucher giftVoucher, int pageIndex, int pageSize);
}