import { useEffect } from "react"; import { useQuery } from "@tanstack/react-query"; import { costsApi } from "../api/costs"; import { useCompany } from "../context/CompanyContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { queryKeys } from "../lib/queryKeys"; import { EmptyState } from "../components/EmptyState"; import { formatCents } from "../lib/utils"; import { Card, CardContent } from "@/components/ui/card"; import { DollarSign } from "lucide-react"; export function Costs() { const { selectedCompanyId } = useCompany(); const { setBreadcrumbs } = useBreadcrumbs(); useEffect(() => { setBreadcrumbs([{ label: "Costs" }]); }, [setBreadcrumbs]); const { data, isLoading, error } = useQuery({ queryKey: queryKeys.costs(selectedCompanyId!), queryFn: async () => { const [summary, byAgent, byProject] = await Promise.all([ costsApi.summary(selectedCompanyId!), costsApi.byAgent(selectedCompanyId!), costsApi.byProject(selectedCompanyId!), ]); return { summary, byAgent, byProject }; }, enabled: !!selectedCompanyId, }); if (!selectedCompanyId) { return ; } return (
{isLoading &&

Loading...

} {error &&

{error.message}

} {data && ( <>

Month to Date

{data.summary.monthUtilizationPercent}% utilized

{formatCents(data.summary.monthSpendCents)}{" "} / {formatCents(data.summary.monthBudgetCents)}

90 ? "bg-red-400" : data.summary.monthUtilizationPercent > 70 ? "bg-yellow-400" : "bg-green-400" }`} style={{ width: `${Math.min(100, data.summary.monthUtilizationPercent)}%` }} />

By Agent

{data.byAgent.length === 0 ? (

No cost events yet.

) : (
{data.byAgent.map((row, idx) => (
{row.agentId ?? "Unattributed"} {formatCents(row.costCents)}
))}
)}

By Project

{data.byProject.length === 0 ? (

No project-attributed costs yet.

) : (
{data.byProject.map((row, idx) => (
{row.projectId ?? "Unattributed"} {formatCents(row.costCents)}
))}
)}
)}
); }