package logs

import (
	"os"
	"runtime"
	"time"

	"cloud.o-forge.io/core/oc-lib/config"
	"github.com/rs/zerolog"
)

var logger zerolog.Logger

// logs.CreateLogger
// Create a new logger
// Parameters:
// - appname: string : the name of the application using oclib
// - url: string : the url of a loki logger, console log only if ""
// Returns:
// - zerolog.Logger : the logger that will log for the library and the app

func GetLogger() zerolog.Logger {
	return logger
}

func SetLogger(l zerolog.Logger) {
	logger = l
}

func CreateLogger(funcName string) zerolog.Logger {
	url := config.GetConfig().LokiUrl
	if url != "" {
		labels := map[string]string{
			"app":      config.GetAppName(),
			"code":     "go",
			"platform": runtime.GOOS,
			"function": funcName,
		}

		lokiWriter := NewLokiWriter(url, labels)

		consoleWriter := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339}

		multiWriter := zerolog.MultiLevelWriter(consoleWriter, lokiWriter)

		logger = zerolog.New(multiWriter).With().Timestamp().Logger()
	} else {
		logger = zerolog.New(os.Stdout).With().Timestamp().Logger()
	}
	return logger
}
