/** Approximate cost per million tokens for known models. */
export const MODEL_COSTS_PER_MILLION: Record<string, { input: number; output: number }> = {
  // Anthropic
  'claude-sonnet-4-20250514': { input: 3, output: 15 },
  'claude-3-5-haiku-20241022': { input: 0.80, output: 4 },
  'claude-opus-4-20250514': { input: 15, output: 75 },
  // OpenAI
  'gpt-4o': { input: 2.50, output: 10 },
  'gpt-4o-mini': { input: 0.15, output: 0.60 },
  // Gemini
  'gemini-2.0-flash': { input: 0.10, output: 0.40 },
  'gemini-2.0-flash-lite': { input: 0.025, output: 0.10 },
  'gemini-2.5-pro': { input: 1.25, output: 10 },
  'gemini-2.5-flash': { input: 0.15, output: 0.60 },
  'gemini-1.5-pro': { input: 1.25, output: 5 },
  'gemini-1.5-flash': { input: 0.075, output: 0.30 },
  // GitHub Copilot (included in subscription, tracked at $0)
  'gpt-4.1': { input: 0, output: 0 },
  'gpt-4.1-mini': { input: 0, output: 0 },
  'claude-sonnet-4': { input: 0, output: 0 },
  'claude-haiku-4': { input: 0, output: 0 },
  // Local / unknown models
  'default': { input: 0, output: 0 },
  // xAI (Grok)
  'grok-3': { input: 3, output: 15 },
  'grok-3-mini': { input: 0.30, output: 0.50 },
  'grok-2': { input: 2, output: 10 },
  'grok-2-mini': { input: 0.10, output: 0.25 },
  'grok-3-fast': { input: 5, output: 25 },
  // Bedrock (Meta Llama)
  'meta.llama3-1-70b-instruct-v1:0': { input: 0.72, output: 0.72 },
  'meta.llama3-1-8b-instruct-v1:0': { input: 0.22, output: 0.22 },
  // Bedrock (Amazon Titan)
  'amazon.titan-text-express-v1': { input: 0.20, output: 0.60 },
};

/**
 * Estimate the dollar cost for a given number of input/output tokens.
 * Falls back to zero cost for unknown or local models.
 */
export function estimateCost(inputTokens: number, outputTokens: number, modelName?: string): number {
  const costs = MODEL_COSTS_PER_MILLION[modelName ?? ''] ?? MODEL_COSTS_PER_MILLION['default'];
  return (inputTokens * costs.input + outputTokens * costs.output) / 1_000_000;
}
