package handler

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

func (xlr *xloggerRequest) getCorrelationID() zap.Field {
	return zap.Field{
		Key:    CorrelationID,
		Type:   zapcore.StringType,
		String: *xlr.correlationID,
	}
}

func (xlr *xloggerRequest) With(fields ...zap.Field) *zap.Logger {
	return xlr.logger.With(fields...)
}

func (xlr *xloggerRequest) Print(v ...interface{}) {
	xlr.logger.Print(v...)
}

func (xlr *xloggerRequest) Printf(format string, v ...interface{}) {
	xlr.logger.Printf(format, v...)
}

func (xlr *xloggerRequest) Debug(msg string, tags ...zap.Field) {
	tags = append(tags, xlr.getCorrelationID())
	xlr.logger.Debug(msg, tags...)
}

func (xlr *xloggerRequest) Info(msg string, tags ...zap.Field) {
	tags = append(tags, xlr.getCorrelationID())
	xlr.logger.Info(msg, tags...)
}

func (xlr *xloggerRequest) Warning(msg string, tags ...zap.Field) {
	tags = append(tags, xlr.getCorrelationID())
	xlr.logger.Warning(msg, tags...)
}

func (xlr *xloggerRequest) Error(msg string, err error, tags ...zap.Field) {
	tags = append(tags, xlr.getCorrelationID())
	xlr.logger.Error(msg, err, tags...)
}

func (xlr *xloggerRequest) Panic(msg string, err error, tags ...zap.Field) {
	tags = append(tags, xlr.getCorrelationID())
	xlr.logger.Panic(msg, err, tags...)
}

func (xlr *xloggerRequest) Fatal(msg string, err error, tags ...zap.Field) {
	tags = append(tags, xlr.getCorrelationID())
	xlr.logger.Fatal(msg, err, tags...)
}

func (xlr *xloggerRequest) ZapLogger() *zap.Logger {
	return xlr.ZapLogger().With(xlr.getCorrelationID())
}
