/**
 * Precios por millón de tokens (USD), para registrar el costo de cada turno.
 * Fuente: precios de la API de Anthropic al 06/10/2026. La escritura de caché
 * cuesta 1,25× la entrada; la lectura, lo indicado.
 */
const PRECIOS: Record<string, { entrada: number; salida: number; lecturaCache: number }> = {
  'claude-opus-5-5': { entrada: 4, salida: 20, lecturaCache: 0.2 },
  'claude-sonnet-5-5': { entrada: 2, salida: 10, lecturaCache: 0.2 },
  'claude-haiku-5-5': { entrada: 0.1, salida: 0.5, lecturaCache: 0.01 },
};

export interface UsoTokens {
  input_tokens: number;
  output_tokens: number;
  cache_read_input_tokens?: number | null;
  cache_creation_input_tokens?: number | null;
}

/** Costo en USD. Modelo desconocido: se valoriza como Opus (cota superior). */
export function costoUsd(modelo: string, uso: UsoTokens): number {
  const p = PRECIOS[modelo] ?? PRECIOS['claude-opus-5-5'];
  const leidos = uso.cache_read_input_tokens ?? 0;
  const escritos = uso.cache_creation_input_tokens ?? 0;
  return (
    (uso.input_tokens * p.entrada +
      escritos * p.entrada * 1.25 +
      leidos * p.lecturaCache +
      uso.output_tokens * p.salida) /
    1_000_000
  );
}
