<?php

declare(strict_types=1);

namespace App\Framework\Discovery;

use App\Framework\Context\ContextType;
use App\Framework\DI\Initializer;
use App\Framework\Discovery\Results\AttributeRegistry;
use App\Framework\Discovery\Results\DiscoveryRegistry;
use App\Framework\Discovery\Results\InterfaceRegistry;
use App\Framework\Discovery\Results\TemplateRegistry;
use App\Framework\Discovery\Runtime\DiscoveryLoader;

/**
 * Lädt Discovery-Daten aus gespeicherten Dateien und erstellt DiscoveryRegistry
 *
 * Dieser Initializer ersetzt den alten UnifiedDiscoveryService und lädt
 * die vorher gescannten Discovery-Daten aus storage/discovery/
 */
final readonly class DiscoveryRegistryInitializer
{
    public function __construct(
        private DiscoveryLoader $discoveryLoader
    ) {
    }

    #[Initializer(ContextType::ALL)]
    public function __invoke(): DiscoveryRegistry
    {
        // Lade alle Discovery-Daten aus Storage
        $attributes = $this->discoveryLoader->loadAttributes() ?? new AttributeRegistry();
        $interfaces = $this->discoveryLoader->loadInterfaces() ?? new InterfaceRegistry();
        $templates = $this->discoveryLoader->loadTemplates() ?? new TemplateRegistry();

        // Erstelle und returne DiscoveryRegistry mit geladenen Daten
        return new DiscoveryRegistry(
            attributes: $attributes,
            interfaces: $interfaces,
            templates: $templates
        );
    }
}
