package logger

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

// Config holds the logger configuration
type Config struct {
	ServiceName string
	Environment string // "dev", "local", "production"
}

// Init initializes the global logger with slog.
// It detects the environment to switch between TextHandler (dev) and JSONHandler (prod).
func Init(cfg Config) {
	var handler slog.Handler

	opts := &slog.HandlerOptions{
		// Default level
		Level: slog.LevelInfo,
		// Customize attributes (Time format)
		ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
			if a.Key == slog.TimeKey {
				return slog.String(a.Key, a.Value.Time().Format("2006-01-02 15:04:05"))
			}
			return a
		},
	}

	// Adjust level and format based on environment
	env := strings.ToLower(cfg.Environment)
	if env == "dev" || env == "local" || env == "development" {
		opts.Level = slog.LevelDebug
		handler = slog.NewTextHandler(os.Stdout, opts)
	} else {
		// Production defaults to JSON
		handler = slog.NewJSONHandler(os.Stdout, opts)
	}

	// Create logger with common attributes
	logger := slog.New(handler).With(
		slog.String("svc", cfg.ServiceName),
	)

	// Set as global default logger
	slog.SetDefault(logger)
}
