// Package logger wraps an external logging package
package logger

import (
	"log"

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

type logger = zap.SugaredLogger

// DebugLevel is exported (5)
var DebugLevel = zapcore.DebugLevel

// InfoLevel is exported (4)
var InfoLevel = zapcore.InfoLevel

// WarnLevel is exported (3)
var WarnLevel = zapcore.WarnLevel

// ErrorLevel is exported (2)
var ErrorLevel = zapcore.ErrorLevel

// PanicLevel is exported (1)
var PanicLevel = zapcore.PanicLevel

// New creates a new logger and returns it
func New(level zapcore.Level) *logger {
	var theLogger *zap.Logger
	var err error
	if level == zapcore.DebugLevel {
		theLogger, err = zap.NewDevelopment()
	} else {
		theLogger, err = zap.NewProduction()
	}
	if err != nil {
		log.Fatal("logger.New: 💣 ⛔ zap logger init fail")
	}
	// theLogger.SetLevel
	defer theLogger.Sync() //nolint:errcheck // it's defered
	return theLogger.Sugar()
}
