import type { IStockPrice } from './stockprice.js';
import type { IStockFundamentals } from './fundamentals.js';

/**
 * Combined stock data with price and fundamentals
 * All calculated metrics (market cap, P/E, P/B) are automatically included
 */
export interface IStockData {
  /** Stock ticker symbol */
  ticker: string;

  /** Price information */
  price: IStockPrice;

  /** Fundamental data (optional - may not be available for all stocks) */
  fundamentals?: IStockFundamentals;

  /** When this combined data was fetched */
  fetchedAt: Date;
}

/**
 * Configuration for StockDataService
 */
export interface IStockDataServiceConfig {
  /** Cache configuration */
  cache?: {
    /** TTL for price data (default: 24 hours) */
    priceTTL?: number;
    /** TTL for fundamentals data (default: 90 days) */
    fundamentalsTTL?: number;
    /** Max cache entries (default: 10000) */
    maxEntries?: number;
  };

  /** Provider timeouts */
  timeout?: {
    /** Timeout for price providers (default: 10000ms) */
    price?: number;
    /** Timeout for fundamentals providers (default: 30000ms) */
    fundamentals?: number;
  };
}

/**
 * Request type for getting complete stock data
 */
export interface ICompleteStockDataRequest {
  ticker: string;
  /** Whether to include fundamentals (default: true) */
  includeFundamentals?: boolean;
  /** Whether to enrich fundamentals with price calculations (default: true) */
  enrichFundamentals?: boolean;
}

/**
 * Batch request for multiple stocks
 */
export interface ICompleteStockDataBatchRequest {
  tickers: string[];
  /** Whether to include fundamentals (default: true) */
  includeFundamentals?: boolean;
  /** Whether to enrich fundamentals with price calculations (default: true) */
  enrichFundamentals?: boolean;
}
