package repo

import (
	"context"

	"github.com/tidbcloud/pkgv2/bizerr"
	"github.com/tidbcloud/serverless-service/internal/domain/entity"
)

type ExportRepo interface {
	ListByFilter(ctx context.Context, filter entity.ExportFilter) ([]*entity.Export, bizerr.BizError)
	CountByFilter(ctx context.Context, filter entity.ExportFilter) (int64, bizerr.BizError)
	GroupByState(ctx context.Context) ([]*entity.ExportStateCount, bizerr.BizError)
	Create(ctx context.Context, export *entity.Export) bizerr.BizError
	TransitionPreparingState(ctx context.Context, export *entity.Export) (bool, bizerr.BizError)
	// GetById get export by clusterId and exportId. This is useful when you want to authenticate export
	GetById(ctx context.Context, clusterId, exportId string) (*entity.Export, bizerr.BizError)
	// UpdateRunningState update export status from running to canceled/failed/succeed
	UpdateRunningState(ctx context.Context, export *entity.Export) (*entity.Export, bizerr.BizError)
	UpdateProxyEndpoint(ctx context.Context, exportID, clusterID, proxyEndpoint string) bizerr.BizError
	ClearClusterStatusID(ctx context.Context, exportID, clusterID string, clusterStatusID uint64) bizerr.BizError
	SoftDelete(ctx context.Context, export *entity.Export) (*entity.Export, bizerr.BizError)
	ListMetering(ctx context.Context) ([]*entity.Export, bizerr.BizError)
	UpdateMeteringStatus(ctx context.Context, export *entity.Export) bizerr.BizError
	IncreaseMeteringCount(ctx context.Context, export *entity.Export) bizerr.BizError
}
