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 ComponentSnapshotFilter struct {
	SnapshotsIDs []uint64
	TenantIDs    []uint64
	ProjectIDs   []uint64
	ClusterIDs   []uint64
}

type ComponentSnapshotRepo interface {
	Load(ctx context.Context, id uint64) (*entity.ClusterSnapshot, bizerr.BizError)
	LoadMany(ctx context.Context, ids []uint64) ([]*entity.ClusterSnapshot, bizerr.BizError)
	Save(ctx context.Context, en *entity.ClusterSnapshot) bizerr.BizError
	Query(
		ctx context.Context,
		filter *ComponentSnapshotFilter,
		pager *globaldedicatedv1.Pager,
		sorters []*globaldedicatedv1.Sorter,
	) ([]*entity.ClusterSnapshot, bizerr.BizError)
}
