<?php

declare(strict_types=1);

namespace App\Framework\Logging;

/**
 * Factory für Logger-Instanzen.
 */
final class LoggerFactory
{
    private static ?DefaultLogger $defaultLogger = null;

    /**
     * Erzeugt einen neuen Logger mit optionalen Einstellungen.
     */
    public static function create(
        LogLevel|int $minLevel = LogLevel::DEBUG,
        bool $enabled = true,
        array $handlers = []
    ): DefaultLogger {
        return new DefaultLogger($minLevel, $enabled, $handlers);
    }

    /**
     * Gibt den Standard-Logger zurück oder erstellt ihn, falls er noch nicht existiert.
     */
    public static function getDefaultLogger(): DefaultLogger
    {
        if (self::$defaultLogger === null) {
            $debug = filter_var(getenv('APP_DEBUG'), FILTER_VALIDATE_BOOLEAN);
            $minLevel = $debug ? LogLevel::DEBUG : LogLevel::INFO;

            self::$defaultLogger = self::create($minLevel);
        }

        return self::$defaultLogger;
    }

    /**
     * Setzt einen benutzerdefinierten Logger als Standard-Logger.
     */
    public static function setDefaultLogger(DefaultLogger $logger): void
    {
        self::$defaultLogger = $logger;
    }
}
