package export

import (
	"context"
	"strconv"

	eventdata "github.com/tidbcloud/eventbus-datastruct/event"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"

	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/service/displayevent"
	"github.com/tidbcloud/tidb-management-service/utilities/clusterevent"
)

func newExportDisplayEvent(
	ctx context.Context,
	export *entity.Export,
	eventType string,
	status eventdata.EventStatus,
	summary string,
) *clusterevent.DisplayEvent {
	detail := displayevent.ExportDetail{
		ExportID:    export.ExportId,
		DisplayName: export.DisplayName,
		State:       string(export.State),
	}
	if export.ExportOptions != nil {
		detail.FileType = export.ExportOptions.FileType
		detail.Compression = export.ExportOptions.Compression
	}
	clusterID, err := strconv.ParseUint(export.ClusterId, 10, 64)
	if err != nil {
		tilog.Warn(
			ctx,
			"failed to parse export cluster id for display event",
			zap.String("export_id", export.ExportId),
			zap.String("cluster_id", export.ClusterId),
			zap.Error(err),
		)
		return nil
	}
	return displayevent.New(
		ctx,
		eventType,
		status,
		export.OrganizationId,
		clusterID,
		export.ExportId,
		summary,
		detail,
	)
}
