package private_link

import (
	"context"

	"github.com/tidbcloud/dataflow-service/app/models/domain"
	"github.com/tidbcloud/pkgv2/bizerr"
)

const (
	// UnusedEndpointRetentionDays is the number of days an unused endpoint will be retained before deletion
	UnusedEndpointRetentionDays = 30
)

type BizPrivateLinkWorker interface {
	MeterChangefeeds(ctx context.Context) bizerr.BizError
	BillChangefeeds(ctx context.Context) bizerr.BizError
}

type SinkEndpointModel interface {
	CreateSinkEndpoint(
		ctx context.Context, req *domain.CreateSinkEndpointReq,
	) (*domain.CreateSinkEndpointResp, bizerr.BizError)
	ListSinkEndpoint(
		ctx context.Context, req *domain.ListSinkEndpointsReq,
	) (*domain.ListSinkEndpointsResp, bizerr.BizError)
	QuerySinkEndpoint(
		ctx context.Context, req *domain.QuerySinkEndpointReq,
	) (*domain.QuerySinkEndpointResp, bizerr.BizError)
	DeleteSinkEndpoint(ctx context.Context, req *domain.DeleteSinkEndpointReq) bizerr.BizError
	GetAvailabilityZones(
		ctx context.Context, req *domain.GetAvailabilityZonesReq,
	) (*domain.GetAvailabilityZonesResp, bizerr.BizError)
	GenerateSinkAdvertisedListener(
		ctx context.Context, req *domain.GenerateSinkAdvertisedListenerReq,
	) (*domain.GenerateSinkAdvertisedListenerResp, bizerr.BizError)
	ValidateSinkAdvertisedListenerDomain(
		ctx context.Context, req *domain.ValidateSinkAdvertisedListenerDomainReq,
	) (*domain.ValidateSinkAdvertisedListenerDomainResp, bizerr.BizError)
	GetSinkEndpointAuthInfo(
		ctx context.Context, req *domain.GetSinkEndpointAuthInfoReq,
	) (*domain.GetSinkEndpointAuthInfoResp, bizerr.BizError)
	CreateSinkEndpointUsage(
		ctx context.Context, req *domain.CreateSinkEndpointUsageReq,
	) (*domain.CreateSinkEndpointUsageResp, bizerr.BizError)
	DeleteSinkEndpointUsage(ctx context.Context, req *domain.DeleteSinkEndpointUsageReq) bizerr.BizError
}

type SinkEndpointWorker interface {
	SyncAllEndpoints(ctx context.Context) error
	CleanupUnusedEndpoints(ctx context.Context) error
}
