package export

import (
	"context"

	"github.com/tidbcloud/tiinf/sdk/auditlog"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	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/utilities/bizerr"
	"github.com/tidbcloud/tidb-management-service/utilities/grpc/metadata"
)

func (s *serverImpl) DeleteExport(
	ctx context.Context,
	req *openapingv1beta2.DeleteExportRequest,
) (*openapingv1beta2.Export, error) {
	ctx, span := tracer.Start(ctx, "DeleteExport")
	defer span.End()
	var (
		err     error
		reqMeta *metadata.RequestMeta
	)

	detailsFunc := func() auditlog.Details {
		details := eventbus.NewAuditLogDetails(eventbus.TierTypePremium)
		details[auditlog.KeyTargetClusterId] = req.GetTidbId()
		details[auditlog.KeyExportID] = req.GetExportId()
		return details
	}
	defer func() {
		go s.auditLogSender.SubmitAuditLogForNextgen(
			context.WithoutCancel(ctx),
			auditlog.EventExportDataDeleted,
			reqMeta,
			detailsFunc,
			err,
		)
	}()

	reqMeta, err = metadata.ExtractRequestMetaWithCheckPermission(ctx)
	if err != nil {
		return nil, bizerr.WrapErrorWithCode(err, bizerr.ErrCodeParams, "failed to extract request metadata")
	}

	resp, err := s.nextGenCli.DeleteExport(ctx, &globalngv1.DeleteExportRequest{
		ClusterId: req.TidbId,
		ExportId:  req.ExportId,
	})
	if err != nil {
		return nil, err
	}
	return ToOpenAPIExport(resp), nil
}
