package repo

import (
	"context"
	"time"
	"voucher/internal/biz/bo"
	"voucher/internal/biz/do"
	"voucher/internal/biz/vo"
)

type OrderRepo interface {
	FinUsedInBatches(ctx context.Context, req *do.WechatUsedQuery, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	SpecifyFindInBatches(ctx context.Context, w *bo.FindInBatchesBo, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	FinSucByStockIdInBatches(ctx context.Context, req *do.WechatQuery, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	//FinFailByStockIdInBatches(ctx context.Context, batchNo string, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	//FindIngInBatches(ctx context.Context, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	FindInBatches(ctx context.Context, w *bo.FindInBatchesUseBo, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	FindRetryQuery(ctx context.Context, req *do.RetryQueryNotice, fun func(ctx context.Context, rows []*bo.OrderBo) error) error
	GetByOutBizNo(ctx context.Context, t vo.OrderType, outBizNo string) (*bo.OrderBo, error)
	GetByOrderNo(ctx context.Context, orderNo string) (*bo.OrderBo, error)
	GetByCouponId(ctx context.Context, merchantNo, batchNo, voucherNo string) (*bo.OrderBo, error)
	Create(ctx context.Context, req *bo.OrderBo) (*bo.OrderBo, error)
	GetByID(ctx context.Context, id uint64) (*bo.OrderBo, error)
	Ing(ctx context.Context, id uint64) error
	Success(ctx context.Context, id uint64, voucherNo string) error
	Fail(ctx context.Context, id uint64, remark string) error
	Used(ctx context.Context, id uint64) error
	NotifyUsed(ctx context.Context, id uint64, transactionId string, lastUseTime time.Time) error
	MultiLastUsed(ctx context.Context, id uint64, lastUseTime time.Time) error
	MultiOverUsed(ctx context.Context, id uint64, lastUseTime time.Time, remark string) error
	Available(ctx context.Context, id uint64) error
	Expired(ctx context.Context, id uint64) error
}
