package repo

import (
	"context"

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

type (
	BizPrivateLinkEndpointFilterOP func(
		qs entity.BizSinkEndpointQuerySet,
	) entity.BizSinkEndpointQuerySet
	BizPrivateLinkEndpointUsageFilterOP func(
		qs entity.BizSinkEndpointUsageQuerySet,
	) entity.BizSinkEndpointUsageQuerySet
)

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

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