package logger

import (
	"log"
	"time"

	"github.com/evalphobia/logrus_sentry"
	"github.com/sirupsen/logrus"
)

type Logger struct {
	*logrus.Logger
}

func NewLogger(appSource string, dsn string) *Logger {
	logger := logrus.New()
	logger.SetReportCaller(true) // Добавим отображение строки

	//
	if dsn == "" {
		logger.Warn("sentry dsn is empty, its use is not possible")
	} else {
		if hook, err := logrus_sentry.NewSentryHook(dsn, []logrus.Level{
			logrus.PanicLevel,
			logrus.FatalLevel,
			logrus.ErrorLevel,
			logrus.InfoLevel,
			logrus.WarnLevel,
		}); err != nil {
			log.Fatal(err)
		} else {
			//
			tags := make(map[string]string)
			tags["app"] = appSource

			hook.Timeout = 1 * time.Second
			hook.SetTagsContext(tags)

			//
			logger.Hooks.Add(hook)
		}
	}

	return &Logger{
		Logger: logger,
	}
}