import type { LlmProvider, ProviderId } from './types';
import { ProviderNotImplementedError } from './types';
import { geminiProvider } from './gemini';
import { openaiProvider } from './openai';
import { anthropicProvider } from './anthropic';
import { mockProvider } from './mock';

export const PROVIDER_REGISTRY: Record<ProviderId, LlmProvider> = {
  gemini: geminiProvider,
  openai: openaiProvider,
  anthropic: anthropicProvider,
  mock: mockProvider,
};

/**
 * Provider IDs that are fully implemented and selectable by admins.
 * openai and anthropic are registered but not yet wired — exclude them
 * from admin-facing lists until implemented.
 */
export const IMPLEMENTED_PROVIDER_IDS: ProviderId[] = ['gemini', 'mock'];

export function getProvider(id: ProviderId): LlmProvider {
  const p = PROVIDER_REGISTRY[id];
  if (!p) throw new Error(`unknown provider id: ${id}`);
  if (!IMPLEMENTED_PROVIDER_IDS.includes(id)) {
    throw new ProviderNotImplementedError(`provider ${id} is not yet implemented`);
  }
  return p;
}
