package console_auditlog

import (
	"context"

	"github.com/tidbcloud/dataflow-service-ng/pkg/log"
	mgmt "github.com/tidbcloud/tidb-management-service/api/spec/tidb_mgmt_service/v1"
	"github.com/tidbcloud/tiinf/sdk/auditlog"
	"go.uber.org/zap"
)

func Submit(
	ctx context.Context,
	eventType auditlog.EventType,
	cluster *mgmt.Cluster,
	details auditlog.Details,
	success bool,
) {
	if cluster == nil {
		log.GetLogger(ctx).Warn("skip audit log: cluster is nil", zap.Int("event_type", int(eventType)))
		return
	}
	logger := log.GetLogger(ctx)
	if err := auditlog.NewEvent(ctx, eventType).
		SetResult(success).
		SetOrgID(cluster.GetOrganizationId()).
		SetProjectID(cluster.GetProjectId()).
		SetClusterID(cluster.GetClusterId()).
		SetDetails(details.Build()).
		Submit(); err != nil {
		logger.Warn("failed to submit audit log", zap.Int("event_type", int(eventType)), zap.Error(err))
	}
}

func SubmitAsync(
	ctx context.Context,
	eventType auditlog.EventType,
	cluster *mgmt.Cluster,
	details auditlog.Details,
	success bool,
) {
	go Submit(context.WithoutCancel(ctx), eventType, cluster, details, success)
}
