package repo

import (
	"context"

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

type (
	BizPrivateLinkEndpointFilterOP func(
		qs entity.BizPrivateLinkEndpointQuerySet,
	) entity.BizPrivateLinkEndpointQuerySet
	BizPrivateLinkEndpointUsageFilterOP func(
		qs entity.BizPrivateLinkEndpointUsageQuerySet,
	) entity.BizPrivateLinkEndpointUsageQuerySet
)

type BizPrivateLinkEndpointRepo interface {
	Load(ctx context.Context, id uint64) (*entity.BizPrivateLinkEndpoint, bizerr.BizError)
	List(ctx context.Context, ops ...BizPrivateLinkEndpointFilterOP) ([]entity.BizPrivateLinkEndpoint, bizerr.BizError)
	Count(ctx context.Context, ops ...BizPrivateLinkEndpointFilterOP) (int64, bizerr.BizError)
	Save(ctx context.Context, endpoint *entity.BizPrivateLinkEndpoint) bizerr.BizError
	Delete(ctx context.Context, id uint64) bizerr.BizError
}

type BizPrivateLinkEndpointUsageRepo interface {
	Load(ctx context.Context, id uint64) (*entity.BizPrivateLinkEndpointUsage, bizerr.BizError)
	List(
		ctx context.Context, ops ...BizPrivateLinkEndpointUsageFilterOP,
	) ([]entity.BizPrivateLinkEndpointUsage, bizerr.BizError)
	Count(ctx context.Context, ops ...BizPrivateLinkEndpointUsageFilterOP) (int64, bizerr.BizError)
	Save(ctx context.Context, endpointUsage *entity.BizPrivateLinkEndpointUsage) bizerr.BizError
	Delete(ctx context.Context, id uint64) bizerr.BizError
}
