package cidr

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 Filter struct {
	IDs                []uint64
	OrganizationIds    []uint64
	ProjectIDs         []uint64
	RegionNames        []entity.RegionName
	CloudProviderNames []entity.CloudProviderName
	VpcIDs             []string
}

type Repo interface {
	Create(ctx context.Context, cidr *entity.CIDR) bizerr.BizError
	Save(ctx context.Context, cidr *entity.CIDR) bizerr.BizError
	Delete(ctx context.Context, id uint64) bizerr.BizError
	Load(ctx context.Context, projectID, id uint64) (*entity.CIDR, bizerr.BizError)
	LoadByCloudProviderAndRegion(
		ctx context.Context,
		projectID, orgId uint64,
		cloudProviderName entity.CloudProviderName,
		regionName entity.RegionName,
	) (*entity.CIDR, bizerr.BizError)
	Query(ctx context.Context, filter *Filter, sorters []*globaldedicatedv1.Sorter) ([]*entity.CIDR, bizerr.BizError)
	Count(ctx context.Context, filter *Filter) (int64, bizerr.BizError)
	CreateSecondaryCidr(ctx context.Context, cidr *entity.CIDR) bizerr.BizError
	QuerySecondaryCidrs(
		ctx context.Context,
		filter *Filter,
		sorters []*globaldedicatedv1.Sorter,
	) ([]*entity.CIDR, bizerr.BizError)
}
