import type { IStockProvider, IProviderConfig, IProviderRegistry } from './interfaces/provider.js';
import type { IStockPrice, IStockDataRequest } from './interfaces/stockprice.js';
interface ISimpleQuoteRequest {
    ticker: string;
}
interface ISimpleBatchRequest {
    tickers: string[];
}
export declare class StockPriceService implements IProviderRegistry {
    private providers;
    private cache;
    private logger;
    private cacheConfig;
    constructor(cacheConfig?: {
        ttl?: number;
        maxEntries?: number;
    });
    /**
     * Get data-type aware TTL for smart caching
     */
    private getCacheTTL;
    /**
     * Convert interval to milliseconds
     */
    private getIntervalMs;
    register(provider: IStockProvider, config?: IProviderConfig): void;
    unregister(providerName: string): void;
    getProvider(name: string): IStockProvider | undefined;
    getAllProviders(): IStockProvider[];
    getEnabledProviders(): IStockProvider[];
    /**
     * Convenience method: Get current price for a single ticker
     */
    getPrice(request: ISimpleQuoteRequest): Promise<IStockPrice>;
    /**
     * Convenience method: Get current prices for multiple tickers
     */
    getPrices(request: ISimpleBatchRequest): Promise<IStockPrice[]>;
    /**
     * New unified data fetching method supporting all request types
     */
    getData(request: IStockDataRequest): Promise<IStockPrice | IStockPrice[]>;
    /**
     * Try incremental fetch: Only fetch NEW data since last cached timestamp
     * Returns merged result if successful, null if incremental fetch not applicable
     */
    private tryIncrementalFetch;
    /**
     * Deduplicate array of prices by timestamp, keeping the latest data for each timestamp
     */
    private deduplicateByTimestamp;
    /**
     * Get TTL based on request type and result
     */
    private getRequestTTL;
    /**
     * Get human-readable description of request
     */
    private getRequestDescription;
    checkProvidersHealth(): Promise<Map<string, boolean>>;
    getProviderStats(): Map<string, {
        successCount: number;
        errorCount: number;
        lastError?: string;
        lastErrorTime?: Date;
    }>;
    clearCache(): void;
    setCacheTTL(ttl: number): void;
    private fetchWithRetry;
    /**
     * New cache key generation for discriminated union requests
     */
    private getDataCacheKey;
    private getFromCache;
    private addToCache;
}
export {};
