package database

import (
	"fmt"
	"io"

	"github.com/sirupsen/logrus"
)

type (
	// LogWriter implements a logger for the gorm logging
	LogWriter struct{ io.Writer }
)

// NewLogrusLogWriterWithLevel creates a new LogWriter with the given
// logrus.Logger and the specified logrus.Level
func NewLogrusLogWriterWithLevel(logger *logrus.Logger, level logrus.Level, dbDriver string) LogWriter {
	writer := logger.WithField("database", dbDriver).WriterLevel(level)
	return LogWriter{writer}
}

// Print implements the gorm.Logger interface
func (l LogWriter) Print(a ...any) {
	fmt.Fprint(l.Writer, a...)
}

// Printf implements the gorm.Logger interface
func (l LogWriter) Printf(format string, a ...any) {
	fmt.Fprintf(l.Writer, format, a...)
}