import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { formatCreditsUsd, parseCreditsRemaining } from "../src/credits.ts";
import { creditsUrl } from "../src/urls.ts";

describe("creditsUrl", () => {
	it("targets OpenRouter-shaped /api/v1/credits", () => {
		assert.equal(creditsUrl("https://api.experientiallabs.ai/v1"), "https://api.experientiallabs.ai/api/v1/credits");
	});

	it("keeps a self-hosted origin", () => {
		assert.equal(creditsUrl("http://127.0.0.1:8000"), "http://127.0.0.1:8000/api/v1/credits");
	});
});

describe("parseCreditsRemaining", () => {
	it("uses OpenRouter total_credits minus total_usage", () => {
		assert.equal(
			parseCreditsRemaining({ data: { total_credits: 100.5, total_usage: 25.75 } }),
			74.75,
		);
	});

	it("prefers an explicit remaining field", () => {
		assert.equal(parseCreditsRemaining({ remaining: 12.5 }), 12.5);
	});

	it("accepts a bare balance", () => {
		assert.equal(parseCreditsRemaining({ balance: 3 }), 3);
	});

	it("rejects a missing balance", () => {
		assert.throws(() => parseCreditsRemaining({ data: {} }), /missing a balance/);
	});
});

describe("formatCreditsUsd", () => {
	it("formats USD with two decimals", () => {
		assert.equal(formatCreditsUsd(74.75), "$74.75");
		assert.equal(formatCreditsUsd(0), "$0.00");
	});
});
