package log

import (
	"os"
	"sync"

	"github.com/go-kit/log"
	"github.com/go-kit/log/level"
)

type Logger log.Logger

var (
	once   sync.Once
	logger Logger
)

func Init(mode string) {
	once.Do(func() {
		var filter level.Option
		switch mode {
		case "debug":
			filter = level.AllowDebug()
		default:
			filter = level.AllowInfo()
		}

		innerLogger := log.NewJSONLogger(log.NewSyncWriter(os.Stderr))
		innerLogger = level.NewFilter(innerLogger, filter)
		innerLogger = log.With(innerLogger, "ts", log.DefaultTimestamp, "caller", log.Caller(4))
		logger = innerLogger
	})
}

func Debug(keyvals ...interface{}) {
	_ = level.Debug(logger).Log(keyvals...)
}
func Info(keyvals ...interface{}) {
	_ = level.Info(logger).Log(keyvals...)
}
func Warn(keyvals ...interface{}) {
	_ = level.Warn(logger).Log(keyvals...)
}
func Error(keyvals ...interface{}) {
	_ = level.Error(logger).Log(keyvals...)
}
