<?php
declare(strict_types=1);

namespace App\Framework\Http;

use Attribute;

#[\Attribute(Attribute::TARGET_CLASS)]
enum MiddlewarePriority: int
{
    // Systemebene - wird vor allem anderen ausgeführt
    case VERY_EARLY = 1100;  // Vor Error Handling, für Request-ID
    case ERROR_HANDLING = 1000;
    case SECURITY = 900;
    case SESSION = 800;
    case CORS = 700;

    // Anwendungsebene
    case ROUTING = 500;
    case CONTENT_NEGOTIATION = 400;
    case AUTHENTICATION = 300;
    case AUTHORIZATION = 200;

    // Geschäftslogik
    case BUSINESS_LOGIC = 100;

    // Logging und Monitoring - wird nach allem anderen ausgeführt
    case LOGGING = 0;

    /**
     * Hilfsmethode zum Erzeugen einer benutzerdefinierten Priorität
     * innerhalb eines bestimmten Bereichs
     */
    /*public static function custom(self $baseLevel, int $offset = 0): int
    {
        return $baseLevel->value + $offset;
    }*/

    /**
     * Gibt eine lesbare Beschreibung der Priorität zurück
     */
    public function getDescription(): string
    {
        return match($this) {
            self::VERY_EARLY => 'Sehr frühe Ausführung (Request-ID)',
            self::ERROR_HANDLING => 'Fehlerbehandlung',
            self::SECURITY => 'Sicherheit (Firewall, CSRF)',
            self::SESSION => 'Session-Verwaltung',
            self::CORS => 'CORS-Header',
            self::ROUTING => 'Routing und URL-Rewriting',
            self::CONTENT_NEGOTIATION => 'Content-Negotiation',
            self::AUTHENTICATION => 'Authentifizierung',
            self::AUTHORIZATION => 'Autorisierung',
            self::BUSINESS_LOGIC => 'Geschäftslogik',
            self::LOGGING => 'Logging (späteste Ausführung)',
        };
    }
}
