// src/stats/dollars.ts
// Thin dollar-conversion helper shared by stats renderers.

import { MODEL_PRICES } from "../pricing/models.ts";

const FALLBACK_MODEL = "claude-sonnet-4-6";

/**
 * Convert a raw token count to USD for the given model and token kind.
 *
 * @param tokens - number of tokens
 * @param model  - model id string (e.g. "claude-sonnet-4-6" or
 *                 "anthropic:claude-sonnet-4-6"); falls back to
 *                 claude-sonnet-4-6 pricing if unknown
 * @param kind   - "input" | "output" | "cachedInput"
 * @returns cost in USD (never negative)
 */
export function tokensToUsd(
  tokens: number,
  model: string,
  kind: "input" | "output" | "cachedInput",
): number {
  if (tokens <= 0) return 0;
  // Strip provider prefix (e.g. "anthropic:claude-sonnet-4-6" → "claude-sonnet-4-6")
  const modelKey = model.includes(":") ? model.split(":").slice(1).join(":") : model;
  const price = MODEL_PRICES[modelKey] ?? MODEL_PRICES[FALLBACK_MODEL];
  if (price === undefined) return 0; // should never happen with fallback, but satisfies TS

  let perKTok: number;
  switch (kind) {
    case "output":
      perKTok = price.outputPerKTok;
      break;
    case "cachedInput":
      perKTok = price.cachedInputPerKTok;
      break;
    default:
      perKTok = price.inputPerKTok;
  }
  return (tokens / 1000) * perKTok;
}
