package repo

import (
	"context"

	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	"github.com/tidbcloud/pkgv2/bizerr"
)

type (
	ReplayFilterOp func(qs entity.ReplayQuerySet) entity.ReplayQuerySet
	ReplayPagerOp  func(qs entity.ReplayQuerySet) entity.ReplayQuerySet
)

type ReplayRepo interface {
	// Load load the replay by id
	Load(ctx context.Context, id uint64) (*entity.Replay, bizerr.BizError)
	// Save save the replay
	Save(ctx context.Context, replay *entity.Replay) bizerr.BizError
	// Create create the replay
	Create(ctx context.Context, replay *entity.Replay) bizerr.BizError
	// List list the replays by filter ops
	List(ctx context.Context, filterOps ...ReplayFilterOp) ([]entity.Replay, bizerr.BizError)
	// ListWithPager list the replays by filter and pager ops
	ListWithPager(ctx context.Context, filterOp ReplayFilterOp, pagerOp ReplayPagerOp) ([]entity.Replay, bizerr.BizError)
	// Count count the replays by filter ops
	Count(ctx context.Context, filterOps ...ReplayFilterOp) (int64, bizerr.BizError)
	// Delete delete the replay
	Delete(ctx context.Context, id uint64) bizerr.BizError
}
