// src/provider/registry.ts
import type { Provider, RouteMatch } from "./types.ts";

export interface ResolvedProvider {
  readonly provider: Provider;
  readonly route: RouteMatch;
}

export class ProviderRegistry {
  private readonly byId = new Map<string, Provider>();

  register(p: Provider): void {
    if (this.byId.has(p.id)) throw new Error(`provider ${p.id} already registered`);
    this.byId.set(p.id, p);
  }

  resolve(method: string, urlPath: string, headers: Headers): ResolvedProvider | null {
    for (const p of this.byId.values()) {
      const route = p.matchesRoute(method, urlPath, headers);
      if (route) return { provider: p, route };
    }
    return null;
  }

  list(): readonly Provider[] {
    return [...this.byId.values()];
  }
}
