import type { IStockPrice, IStockQuoteRequest, IStockBatchQuoteRequest } from './stockprice.js';

export interface IStockProvider {
  name: string;
  priority: number;
  
  fetchPrice(request: IStockQuoteRequest): Promise<IStockPrice>;
  fetchPrices(request: IStockBatchQuoteRequest): Promise<IStockPrice[]>;
  isAvailable(): Promise<boolean>;
  
  supportsMarket?(market: string): boolean;
  supportsTicker?(ticker: string): boolean;
  
  readonly requiresAuth: boolean;
  readonly rateLimit?: {
    requestsPerMinute: number;
    requestsPerDay?: number;
  };
}

export interface IProviderConfig {
  enabled: boolean;
  priority?: number;
  apiKey?: string;
  timeout?: number;
  retryAttempts?: number;
  retryDelay?: number;
}

export interface IProviderRegistry {
  register(provider: IStockProvider, config?: IProviderConfig): void;
  unregister(providerName: string): void;
  getProvider(name: string): IStockProvider | undefined;
  getAllProviders(): IStockProvider[];
  getEnabledProviders(): IStockProvider[];
}