import { rendererExtensionRegistry } from './registry';
import type { RendererExtension } from './types';

interface RendererExtensionManifest {
  extensions?: {
    renderer?: string[];
  };
}

const registeredModules = new Map<string, () => RendererExtension>();

export function registerRendererExtensionModule(id: string, factory: () => RendererExtension): void {
  registeredModules.set(id, factory);
}

export function loadRendererExtensions(manifest?: RendererExtensionManifest): void {
  const extensionIds = manifest?.extensions?.renderer;

  if (!extensionIds || extensionIds.length === 0) {
    for (const [, factory] of registeredModules) {
      rendererExtensionRegistry.register(factory());
    }
    return;
  }

  for (const id of extensionIds) {
    const factory = registeredModules.get(id);
    if (factory) {
      rendererExtensionRegistry.register(factory());
    } else {
      console.warn(`[extensions] Renderer extension "${id}" not found in registered modules`);
    }
  }
}