// ── Adapterregister (AUT-F4) ─────────────────────────────────────────────────
// Centrale opzoeklaag boven de gegenereerde adapter-barrel
// (adapters/index.ts): welke adapter bedient welke dienst. Een echte adapter
// primeert altijd op de mock van dezelfde dienst, zodat het aansluiten van een
// overheids-API (AUT-S4/S7) = één bestand toevoegen in adapters/ — zonder
// bestaande code te wijzigen. De fundament-ratchet (lib/fundament-ratchet.
// test.ts) bewaakt dat elke dienst aangesloten blijft en dat het aantal echte
// adapters enkel kan stijgen.

import type { Connector, ConnectorRegistratie } from "./connector";
import type { ConnectorDienst } from "./fixtures/types";
import { seedAdapters } from "./adapters";

/**
 * De adapter voor een dienst: de echte adapter indien aangesloten, anders de
 * mock; undefined wanneer de dienst (nog) helemaal niet bediend wordt.
 */
export function connectorVoorDienst(
  dienst: ConnectorDienst,
  registraties: readonly ConnectorRegistratie[] = seedAdapters
): Connector | undefined {
  const kandidaten = registraties.filter((r) => r.connector.dienst === dienst);
  return (kandidaten.find((r) => r.soort === "echt") ?? kandidaten[0])?.connector;
}

/** De diensten die door minstens één adapter (optioneel: van het gegeven soort) bediend worden. */
export function aangeslotenDiensten(
  registraties: readonly ConnectorRegistratie[] = seedAdapters,
  soort?: ConnectorRegistratie["soort"]
): ConnectorDienst[] {
  const diensten = registraties
    .filter((r) => soort === undefined || r.soort === soort)
    .map((r) => r.connector.dienst);
  return [...new Set(diensten)];
}
