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

export interface IStockProvider {
  name: string;
  priority: number;

  fetchData(request: IStockDataRequest): Promise<IStockPrice | 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;
  maxRecords?: number; // Maximum records to fetch per request (default: 10000)
  defaultIntradayLimit?: number; // Default limit for intraday requests without explicit limit (default: 1000)
}

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