package cluster

import (
	"context"

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

type ComponentFilter struct {
	ClusterId     uint64
	ComponentType globaldedicatedv1.ComponentType
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type ComponentRepo interface {
	GetUsedComponentCount(
		ctx context.Context,
		tenantId uint64,
	) (map[globaldedicatedv1.ComponentType]uint32, bizerr.BizError)
	Save(ctx context.Context, component *entity.DesiredClusterComponent) (uint64, bizerr.BizError)
	SaveAll(
		ctx context.Context,
		components []*entity.DesiredClusterComponent,
		clusterId, tidbGroupId uint64,
	) bizerr.BizError
	Load(ctx context.Context, id uint) (*globaldedicatedv1.Cluster_ClusterComponent, bizerr.BizError)
	DeleteByClusterId(ctx context.Context, clusterId uint64) bizerr.BizError
	DeleteByTidbGroupId(ctx context.Context, clusterId, tidbGroupId uint64) bizerr.BizError
}
