package log

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

var DefaultLogger *zap.Logger
var DefaultConfig zap.Config

func Named(s string) *zap.Logger {
	return DefaultLogger.WithOptions(zap.AddCallerSkip(-1)).Named(s)
}

func WithOptions(opts ...zap.Option) *zap.Logger {
	return DefaultLogger.WithOptions(zap.AddCallerSkip(-1)).WithOptions(opts...)
}

func With(fields ...zap.Field) *zap.Logger {
	return DefaultLogger.WithOptions(zap.AddCallerSkip(-1)).With(fields...)
}

func Debug(msg string, fields ...zap.Field) {
	DefaultLogger.Debug(msg, fields...)
}

func Info(msg string, fields ...zap.Field) {
	DefaultLogger.Info(msg, fields...)
}

func Warn(msg string, fields ...zap.Field) {
	DefaultLogger.Warn(msg, fields...)
}

func Error(msg string, fields ...zap.Field) {
	DefaultLogger.Error(msg, fields...)
}

func Panic(msg string, fields ...zap.Field) {
	DefaultLogger.Panic(msg, fields...)
}

func Fatal(msg string, fields ...zap.Field) {
	DefaultLogger.Fatal(msg, fields...)
}

func Sync() error {
	return DefaultLogger.Sync()
}

func Core() zapcore.Core {
	return DefaultLogger.Core()
}

func SetLevel(lv zapcore.Level) {
	DefaultConfig.Level.SetLevel(lv)
}
