package auditloginit

import (
	"context"
	"time"

	"github.com/pingcap/errors"
	"github.com/tidbcloud/tiinf/sdk/auditlog"
	"github.com/tidbcloud/tiinf/transport/tieventbus"

	"github.com/pingcap-inc/clinic_cloud_server/pkg/config"
)

// InitAuditLogSDK mirrors github.com/tidbcloud/tiinf/sdk/auditlog.InitAuditLogSDK but wires Kafka SASL
// when config audit_kafka.sasl.enable is true. Otherwise it delegates to the upstream SDK unchanged.
func InitAuditLogSDK(ctx context.Context, cfg *config.Config, mqTimeout time.Duration) error {
	if cfg == nil {
		return errors.New("config is nil")
	}
	if err := ValidateKafkaExt(cfg); err != nil {
		return err
	}
	if !cfg.KafkaExt.SASL.Enabled {
		return auditlog.InitAuditLogSDK(ctx, mqTimeout)
	}
	ebCfg := NewEventbusConfig(cfg, auditlog.EventBusAppName, mqTimeout)
	eb, err := tieventbus.NewEventbus(ebCfg)
	if err != nil {
		return errors.Annotate(err, "tieventbus.NewEventbus")
	}
	if err := eb.Run(); err != nil {
		return errors.Annotate(err, "eventbus.Run")
	}
	return auditlog.InitAuditLogSDKWithEventbus(ctx, eb)
}
