"use client"; import { useQuery } from "@tanstack/react-query"; import { CreditCard, Zap } from "lucide-react"; import Link from "next/link"; import { useParams } from "next/navigation"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { stripeApiService } from "@/lib/apis/stripe-api.service"; interface PageUsageDisplayProps { pagesUsed: number; pagesLimit: number; tokensUsed: number; tokensLimit: number; } function formatTokenCount(n: number): string { if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`; if (n >= 1_000) return `${(n / 1_000).toFixed(0)}K`; return n.toLocaleString(); } function progressColor(percent: number): string { if (percent > 95) return "[&>div]:bg-red-500"; if (percent > 80) return "[&>div]:bg-amber-500"; return ""; } export function PageUsageDisplay({ pagesUsed, pagesLimit, tokensUsed, tokensLimit, }: PageUsageDisplayProps) { const params = useParams(); const searchSpaceId = params?.search_space_id ?? ""; const pagePercent = Math.min(100, (pagesUsed / pagesLimit) * 100); const tokenPercent = Math.min(100, (tokensUsed / tokensLimit) * 100); const { data: stripeStatus } = useQuery({ queryKey: ["stripe-status"], queryFn: () => stripeApiService.getStatus(), }); const pageBuyingEnabled = stripeStatus?.page_buying_enabled ?? true; return (