import { all } from "../db";
import { METERS } from "~/lib/meters";
import type { MeterId } from "~/lib/meters";
import { billingSettings, hardCap } from "./quota";
import type { BillingSettings } from "./quota";
import { periodOf } from "./record";
export type MeterUsage = {
meter: MeterId;
label: string;
category: string;
unit: string;
quantity: number;
reserved: number;
included: number | null;
hardCap: number | null;
overageCents: number;
};
export type UsageSummary = {
accountId: string;
period: string;
plan: { id: string; label: string; billsOverage: boolean };
spendingLimitCents: number | null;
totalCents: number;
meters: MeterUsage[];
repos: { repoId: string; name: string | null; meter: string; quantity: number }[];
days: { day: string; meter: string; quantity: number }[];
alerts: { subject: string; threshold: number; createdAt: number }[];
};
export function overageCents(quantity: number, included: number | null, microCentsPerUnit: number): number {
const billable = Math.max(0, quantity - (included ?? 0));
return (billable * microCentsPerUnit) / 1e6;
}
export function meterUsages(
settings: BillingSettings,
counters: Map<string, { quantity: number; reserved: number }>,
gauges: Map<string, number>,