package export

import (
	"context"

	"go.opentelemetry.io/otel"

	openapingv1beta2 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/nextgen/v1beta2"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/eventbus"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/nextgenglobal"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/service/nextgen/cluster"
)

var tracer = otel.Tracer("App.NextGen.Export")

type Server interface {
	ListExports(ctx context.Context, req *openapingv1beta2.ListExportsRequest) (*openapingv1beta2.ListExportsResponse, error)
	GetExport(ctx context.Context, req *openapingv1beta2.GetExportRequest) (*openapingv1beta2.Export, error)
	CreateExport(ctx context.Context, req *openapingv1beta2.CreateExportRequest) (*openapingv1beta2.Export, error)
	DeleteExport(ctx context.Context, req *openapingv1beta2.DeleteExportRequest) (*openapingv1beta2.Export, error)
	CancelExport(ctx context.Context, req *openapingv1beta2.CancelExportRequest) (*openapingv1beta2.Export, error)
}

func NewServer(
	nextGenCli nextgenglobal.NextGenGlobal,
	clusterSvc cluster.Service,
	auditLogSender eventbus.ConsoleAuditLogSender,
) Server {
	return &serverImpl{
		nextGenCli:     nextGenCli,
		clusterSvc:     clusterSvc,
		auditLogSender: auditLogSender,
	}
}

type serverImpl struct {
	nextGenCli     nextgenglobal.NextGenGlobal
	clusterSvc     cluster.Service
	auditLogSender eventbus.ConsoleAuditLogSender
}
