package logger

import "github.com/getsentry/sentry-go"

// Level type
type Level int

// Log level definitions
const (
	// DebugLevel usually only enabled when debugging. Very verbose logging.
	DebugLevel Level = 10
	// InfoLevel general operational entries about what's going on inside the application.
	InfoLevel Level = 20
	// WarnLevel non-critical entries that deserve eyes.
	WarnLevel Level = 30
	// ErrorLevel used for errors that should definitely be noted.
	ErrorLevel Level = 40
)

// Config options for the logger.
type Config struct {
	LogThreshold Level
	Formatter    string
	SentryConfig sentry.ClientOptions
}

// Interface for a logger
type Interface interface {
	GetLogLevel() Level
	Debug(format string, args ...interface{})
	Info(format string, args ...interface{})
	Warn(format string, args ...interface{})
	Error(errorClass string, err error, args ...interface{})
	Errorf(errorClass, format string, err error, args ...interface{})
}

// ConfigurableLogger is an interface for a logger that can be configured
type ConfigurableLogger interface {
	Configure(c *Config) error
}