import { describe, expect, it } from "../test/testHarness";

import {
  millsPerThousandTokensToCreditsPerMillion,
  modelPriceToTextTokenCreditRate,
  resolveTextTokenCreditRate,
} from "./modelPricing";

describe("modelPricing", () => {
  it("converts backend mills per thousand tokens to credits per million tokens", () => {
    expect(millsPerThousandTokensToCreditsPerMillion(27)).toBe(2_700);
    expect(millsPerThousandTokensToCreditsPerMillion(108)).toBe(10_800);
  });

  it("converts a token model price row to a text token credit rate", () => {
    expect(
      modelPriceToTextTokenCreditRate({
        modelKey: "gpt-4o",
        inputPriceMills: 27,
        outputPriceMills: 108,
        flatPriceMills: null,
        currency: "CNY",
        enabled: true,
      }),
    ).toEqual({
      inputCreditsPerMillion: 2_700,
      outputCreditsPerMillion: 10_800,
      source: "server",
      modelKey: "gpt-4o",
    });
  });

  it("resolves token pricing by exact or fuzzy model key without accepting flat prices", () => {
    const prices = [
      {
        modelKey: "gemini-3-pro-image",
        inputPriceMills: null,
        outputPriceMills: null,
        flatPriceMills: 200,
        currency: "CNY",
        enabled: true,
      },
      {
        modelKey: "gemini-3.1-pro",
        inputPriceMills: 12,
        outputPriceMills: 48,
        flatPriceMills: null,
        currency: "CNY",
        enabled: true,
      },
    ];

    expect(resolveTextTokenCreditRate(prices, "gemini")).toEqual({
      inputCreditsPerMillion: 1_200,
      outputCreditsPerMillion: 4_800,
      source: "server",
      modelKey: "gemini-3.1-pro",
    });
  });
});
