package tilog

import (
	"context"

	"github.com/pingcap/log"
	"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(TraceIDFromContext(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(TraceIDFromContext(ctx)...).Sugar()
}

func TraceIDFromContext(ctx context.Context) []zap.Field {
	spanCtx := trace.SpanContextFromContext(ctx)
	var fields []zap.Field
	if spanCtx.HasTraceID() {
		fields = append(fields, zap.String("trace_id", spanCtx.TraceID().String()))
	}
	return fields
}

// to compitable with pkgv2 interface
func FieldsFromContext(ctx context.Context) []zap.Field {
	spanCtx := trace.SpanContextFromContext(ctx)
	var fields []zap.Field
	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(TraceIDFromContext(ctx)...)
}
