/**
 * 임베딩 제공자 팩토리
 * 전략 패턴을 사용하여 순환 의존성 방지
 *
 * 클린코드 원칙:
 * - 단일 책임 원칙: 제공자 생성만 담당
 * - 의존성 역전: 인터페이스에 의존
 * - 개방-폐쇄: 새로운 제공자 추가 용이
 */
import type { EmbeddingServiceInterface, EmbeddingProvider, ProviderInfo } from '../../../shared/types/embedding.types.js';
import type { ProviderFallbackDecision } from '../../../shared/types/embedding-provider-monitoring.types.js';
/**
 * 임베딩 제공자 팩토리
 * 순환 의존성을 방지하기 위해 팩토리 패턴 사용
 */
export declare class EmbeddingProviderFactory {
    private static instance;
    private providers;
    private readonly availabilityService;
    private constructor();
    /**
     * 싱글톤 인스턴스 반환
     */
    static getInstance(): EmbeddingProviderFactory;
    /**
     * 제공자 초기화
     * 클린코드: 단일 책임 원칙 - 초기화만 담당
     */
    private initializeProviders;
    /**
     * 제공자 반환
     * 클린코드: 단일 책임 원칙 - 제공자 반환만 담당
     */
    getProvider(provider: EmbeddingProvider): EmbeddingServiceInterface | null;
    /**
     * 사용 가능한 제공자 목록 반환
     * TDD: 각 제공자의 사용 가능 여부 확인
     */
    getAvailableProviders(): ProviderInfo[];
    /**
     * 우선순위에 따른 제공자 선택
     * TDD: 사용 가능한 제공자 중 우선순위가 높은 것 선택
     */
    selectProvider(preferredProvider?: EmbeddingProvider): EmbeddingServiceInterface | null;
    selectProviderWithHealthCheck(preferredProvider?: EmbeddingProvider): Promise<{
        service: EmbeddingServiceInterface | null;
        decision: ProviderFallbackDecision;
    }>;
    /**
     * 제공자 등록 (확장성)
     * 클린코드: 개방-폐쇄 원칙 - 확장에는 열려있음
     */
    registerProvider(provider: EmbeddingProvider, service: EmbeddingServiceInterface): void;
    /**
     * 제공자 제거
     */
    unregisterProvider(provider: EmbeddingProvider): boolean;
    private resolveAvailability;
    /**
     * 모든 제공자 초기화
     */
    reset(): void;
    private normalizeProviderName;
    private getPriorityProviders;
    handleProviderFailure(provider: EmbeddingProvider): void;
    getProviderName(service: EmbeddingServiceInterface | null): EmbeddingProvider | null;
    private createService;
}
//# sourceMappingURL=embedding-provider-factory.d.ts.map