package tidbgroup

import (
	"context"

	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

type Filter struct {
	Ids          []uint64
	ClusterIds   []uint64
	ShowDeleted  bool
	DisplayNames []string
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type Repo interface {
	Load(ctx context.Context, clusterID, id uint64) (*entity.TidbNodeGroup, bizerr.BizError)
	LoadForUpdate(ctx context.Context, clusterID, id uint64) (*entity.TidbNodeGroup, bizerr.BizError)
	LoadDefault(ctx context.Context, clusterID uint64) (*entity.TidbNodeGroup, bizerr.BizError)
	LoadDefaultByClusterIds(
		ctx context.Context,
		clusterIDs []uint64,
		showDeleted bool,
	) (map[uint64]*entity.TidbNodeGroup, bizerr.BizError)
	Query(ctx context.Context, filter *Filter) ([]*entity.TidbNodeGroup, bizerr.BizError)
	Count(ctx context.Context, filter *Filter) (int64, bizerr.BizError)
	Create(ctx context.Context, tidbGroup *entity.TidbNodeGroup) bizerr.BizError
	Save(ctx context.Context, tidbGroup *entity.TidbNodeGroup) bizerr.BizError
	DeleteByClusterId(ctx context.Context, id uint64) bizerr.BizError
	Delete(ctx context.Context, pool *entity.TidbNodeGroup) bizerr.BizError
}
