// pkg/logger/logger.go
package logger

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"

)

var globalLogger *zap.Logger

// Init инициализирует глобальный логгер
func Init(level string, environment string) error {
    var config zap.Config
    
    if environment == "production" {
        config = zap.NewProductionConfig()
    } else {
        config = zap.NewDevelopmentConfig()
        config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
    }

    // Устанавливаем уровень логирования
    switch level {
    case "debug":
        config.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
    case "info":
        config.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
    case "warn":
        config.Level = zap.NewAtomicLevelAt(zap.WarnLevel)
    case "error":
        config.Level = zap.NewAtomicLevelAt(zap.ErrorLevel)
    default:
        config.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
    }

    logger, err := config.Build()
    if err != nil {
        return err
    }

    globalLogger = logger
    return nil
}

// Get возвращает глобальный логгер
func Get() *zap.Logger {
    if globalLogger == nil {
        // Fallback на стандартный логгер если не инициализирован
        logger, _ := zap.NewProduction()
        return logger
    }
    return globalLogger
}

// Sync синхронизирует буферы логгера
func Sync() {
    if globalLogger != nil {
        globalLogger.Sync()
    }
}

// Sugar возвращает SugaredLogger
func Sugar() *zap.SugaredLogger {
    return Get().Sugar()
}