package repo

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

type OrderRepo interface {
	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
	GetByOutBizNo(ctx context.Context, t vo.OrderType, outBizNo string) (*bo.OrderBo, error)
	GetByOrderNo(ctx context.Context, orderNo string) (*bo.OrderBo, error)
	GetByVoucherNo(ctx context.Context, merchantNo, batchNo, voucherNo string) (*bo.OrderBo, error)
	GetByTransactionId(ctx context.Context, stockCreatorMchId, stockID, transactionId 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) error
	Available(ctx context.Context, id uint64) error
	Expired(ctx context.Context, id uint64) error
}
