package repo

import (
	"context"

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

type (
	CDCInstanceTypeOP func(qs entity.CDCInstanceTypeQuerySet) entity.CDCInstanceTypeQuerySet
	CDCMachineTypeOP  func(qs entity.CDCMachineTypeQuerySet) entity.CDCMachineTypeQuerySet
)

type ChangefeedInstanceTypeRepo interface {
	ListChangefeedInstanceType(ctx context.Context, filter ChangefeedInstanceTypeFilter) (
		[]*entity.ChangefeedInstanceType, bizerr.BizError)
	GetChangefeedInstanceType(ctx context.Context, filter ChangefeedInstanceTypeFilter) (
		*entity.ChangefeedInstanceType, bizerr.BizError)
	SaveChangefeedInstanceType(ctx context.Context, instanceType *entity.ChangefeedInstanceType) bizerr.BizError
}

type ChangefeedInstanceTypeFilter struct {
	BusinessType string
	Name         string
	ID           *entity.ID
}

type CDCInstanceTypeRepo interface {
	List(ctx context.Context, ops ...CDCInstanceTypeOP) ([]entity.CDCInstanceType, bizerr.BizError)
	Save(ctx context.Context, instanceType *entity.CDCInstanceType) bizerr.BizError
	Get(ctx context.Context, ops ...CDCInstanceTypeOP) (*entity.CDCInstanceType, bizerr.BizError)
}

type CDCMachineTypeRepo interface {
	List(ctx context.Context, ops ...CDCMachineTypeOP) ([]entity.CDCMachineType, bizerr.BizError)
	Save(ctx context.Context, machineType *entity.CDCMachineType) bizerr.BizError
	Get(ctx context.Context, ops ...CDCMachineTypeOP) (*entity.CDCMachineType, bizerr.BizError)
}
