package logger

import (
	"io"
	"os"
	"time"

	"github.com/korap/korap-mcp/config"
	"github.com/rs/zerolog"
)

// SetupLogger configures zerolog based on the provided configuration
func SetupLogger(cfg *config.LoggingConfig) (zerolog.Logger, error) {
	// Set global log level
	level, err := zerolog.ParseLevel(cfg.Level)
	if err != nil {
		return zerolog.Logger{}, err
	}
	zerolog.SetGlobalLevel(level)

	// Determine output destination
	var output io.Writer
	if cfg.File != "" {
		file, err := os.OpenFile(cfg.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
		if err != nil {
			return zerolog.Logger{}, err
		}
		output = file
	} else {
		output = os.Stdout
	}

	// Configure output format
	var logger zerolog.Logger
	if cfg.Format == "json" {
		logger = zerolog.New(output).With().Timestamp().Logger()
	} else {
		// Text format with console writer for better readability
		consoleWriter := zerolog.ConsoleWriter{
			Out:        output,
			TimeFormat: time.RFC3339,
		}
		logger = zerolog.New(consoleWriter).With().Timestamp().Logger()
	}

	return logger, nil
}

// GetLogger returns a configured logger instance
func GetLogger(cfg *config.LoggingConfig) zerolog.Logger {
	logger, err := SetupLogger(cfg)
	if err != nil {
		// Fallback to default logger if setup fails
		return zerolog.New(os.Stderr).With().Timestamp().Logger()
	}
	return logger
}
