<?php
declare(strict_types=1);

namespace App\Framework\Core;

/**
 * Interface für AttributeMapper mit optimierter Performance
 */
interface AttributeMapper
{
    /**
     * Gibt die Attributklasse zurück, die dieser Mapper verarbeiten kann
     */
    public function getAttributeClass(): string;

    /**
     * @param object $reflectionTarget ReflectionClass|ReflectionMethod
     * @param object $attributeInstance
     * @return array|null
     */
    public function map(object $reflectionTarget, object $attributeInstance): ?array;

    /**
     * Prüft, ob dieses Attribut auf dem Reflector verarbeitet werden kann
     * (Schnelle Prüfung ohne vollständige Verarbeitung)
     */
    #public function canProcess(\Reflector $reflector): bool;

    /**
     * Gibt Metadaten über das Attribut zurück (für Debugging und Caching)
     */
    #public function getAttributeMetadata(): array;
}
