<?php

declare(strict_types=1);

namespace App\Framework\Core\Events;

use App\Framework\DI\DefaultContainer;

/**
 * Führt abschließende Konfigurationen für das Event-System durch
 */
final readonly class EventCompilerPass
{
    /**
     * Richtet zusätzliche Event-Konfigurationen ein
     *
     * @param DefaultContainer $container Der DI-Container
     * @param EventDispatcher $dispatcher Der EventDispatcher
     */
    public static function process(DefaultContainer $container, EventDispatcher $dispatcher): void
    {
        // Hier können weitere Event-Handler oder -Konfigurationen eingerichtet werden
        // Beispiel: System-Events registrieren, die nicht über Attribute verfügbar sind

        // Beispiel für einen Shutdown-Handler
        register_shutdown_function(function () use ($dispatcher, $container) {
            $error = error_get_last();
            if ($error !== null && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
                $exception = new \ErrorException(
                    $error['message'],
                    0,
                    $error['type'],
                    $error['file'],
                    $error['line']
                );

                $dispatcher->dispatch(new ErrorOccurred($exception, 'shutdown'));
            }
        });
    }
}
