<?php

declare(strict_types=1);

namespace App\Framework\Logging\Processors;

use App\Framework\Http\RequestIdGenerator;
use App\Framework\Logging\LogProcessor;
use App\Framework\Logging\LogRecord;

/**
 * Fügt die Request-ID zu Log-Einträgen hinzu.
 */
final readonly class RequestIdProcessor implements LogProcessor
{
    /**
     * @var int Priorität des Processors (10 = recht früh)
     */
    private const int PRIORITY = 10;

    public function __construct(
        private RequestIdGenerator $requestIdGenerator
    ) {
    }

    /**
     * Verarbeitet einen Log-Record und fügt die Request-ID hinzu
     */
    public function processRecord(LogRecord $record): LogRecord
    {
        $currentId = $this->requestIdGenerator->getCurrentId();

        if ($currentId !== null) {
            // Nur die ID ohne Signatur als Extra-Feld hinzufügen
            return $record->addExtra('request_id', $currentId->getId());
        }

        return $record;
    }

    /**
     * Gibt die Priorität des Processors zurück
     */
    public function getPriority(): int
    {
        return self::PRIORITY;
    }

    /**
     * Gibt einen eindeutigen Namen für den Processor zurück
     */
    public function getName(): string
    {
        return 'request_id';
    }
}
