package log

import (
	"context"

	"github.com/pingcap/log"
	"github.com/tidbcloud/pkgv2/logid"
	"go.opentelemetry.io/otel/trace"
	"go.uber.org/zap"
)

// WithContextL returns the global Logger, and add some filed which get from ctx
func WithContextL(ctx context.Context) *zap.Logger {
	return log.L().With(FieldsFromContext(ctx)...)
}

// WithContextS returns the global SugaredLogger, and add some filed which get from ctx
func WithContextS(ctx context.Context) *zap.SugaredLogger {
	return log.L().With(FieldsFromContext(ctx)...).Sugar()
}

func FieldsFromContext(ctx context.Context) []zap.Field {
	var fields []zap.Field
	if id := logid.GetLogid(ctx); id != "" {
		fields = append(fields, zap.String("logid", id))
	}

	spanCtx := trace.SpanContextFromContext(ctx)
	if spanCtx.HasTraceID() {
		fields = append(fields, zap.String("trace_id", spanCtx.TraceID().String()))
	}
	return fields
}

func AppendCtxFields(ctx context.Context, logger *zap.Logger) *zap.Logger {
	return logger.With(FieldsFromContext(ctx)...)
}
