package logger

import (
	"log/slog"
	"os"
	"strings"

	"vul-backend/internal/config"
)

type Logger struct {
	*slog.Logger
}

func New(cfg config.LogConfig) *Logger {
	level := parseLevel(cfg.Level)

	var handler slog.Handler
	if strings.ToLower(cfg.Format) == "text" {
		handler = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level})
	} else {
		handler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: level})
	}

	core := slog.New(handler)
	return &Logger{Logger: core}
}

func parseLevel(level string) slog.Level {
	switch strings.ToLower(level) {
	case "debug":
		return slog.LevelDebug
	case "warn":
		return slog.LevelWarn
	case "error":
		return slog.LevelError
	default:
		return slog.LevelInfo
	}
}

func (l *Logger) Sync() error {
	return nil
}

func (l *Logger) With(args ...any) *Logger {
	return &Logger{Logger: l.Logger.With(args...)}
}
