import type { AIProvider, AIProviderName } from "../core/types.js";
import type { UnknownRecord } from "../types/common.js";
/**
 * Provider constructor interface - supports both sync constructors and async factory functions
 */
type ProviderConstructor = {
    new (modelName?: string, providerName?: string, sdk?: UnknownRecord): AIProvider;
} | ((modelName?: string, providerName?: string, sdk?: UnknownRecord) => Promise<AIProvider>);
/**
 * Provider registration entry
 */
interface ProviderRegistration {
    constructor: ProviderConstructor;
    defaultModel?: string;
    aliases?: string[];
}
/**
 * True Factory Pattern implementation for AI Providers
 * Uses registration-based approach to eliminate switch statements
 * and enable dynamic provider registration
 */
export declare class ProviderFactory {
    private static readonly providers;
    private static initialized;
    /**
     * Register a provider with the factory
     */
    static registerProvider(name: AIProviderName | string, constructor: ProviderConstructor, defaultModel?: string, // Optional - provider can read from env
    aliases?: string[]): void;
    /**
     * Create a provider instance
     */
    static createProvider(providerName: AIProviderName | string, modelName?: string, sdk?: UnknownRecord): Promise<AIProvider>;
    /**
     * Check if a provider is registered
     */
    static hasProvider(providerName: string): boolean;
    /**
     * Get list of available providers
     */
    static getAvailableProviders(): string[];
    /**
     * Get provider registration info
     */
    static getProviderInfo(providerName: string): ProviderRegistration | undefined;
    /**
     * Normalize provider names using aliases (PHASE 1: Factory Pattern)
     */
    static normalizeProviderName(providerName: string): string | null;
    /**
     * Clear all registrations (mainly for testing)
     */
    static clearRegistrations(): void;
    /**
     * Ensure providers are initialized
     */
    private static ensureInitialized;
    /**
     * Initialize default providers
     * NOTE: Providers are now registered by ProviderRegistry to avoid circular dependencies
     */
    private static initializeDefaultProviders;
    /**
     * Create the best available provider for the given name
     * Used by NeuroLink SDK for streaming and generation
     */
    static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: UnknownRecord): Promise<AIProvider>;
}
/**
 * Helper function to create providers with backward compatibility
 */
export declare function createAIProvider(providerName: AIProviderName | string, modelName?: string): Promise<AIProvider>;
export {};
