"use client"; import { useCallback, useEffect, useState } from "react"; import { AI_PROVIDERS } from "@/shared/constants/providers"; import { Button, Card, CardSkeleton } from "@/shared/components"; import ProviderIcon from "@/shared/components/ProviderIcon"; import { formatResetTime, REFRESH_INTERVAL_MS } from "./ProviderLimits/utils"; import { formatVietnamTime } from "@/shared/utils/dateTime"; import { formatTokenCount } from "@/shared/utils/tokenCount.js"; import { USER_TOKEN_LIMIT_WINDOWS } from "open-sse/config/userTokenLimits.js"; function getProviderInfo(providerId) { return AI_PROVIDERS[providerId] || { name: providerId, color: "#6b7280", }; } function formatUpdatedAt(value) { if (!value) return "Not updated yet"; const formattedTime = formatVietnamTime(value, { hour: "2-digit", minute: "2-digit", }); return formattedTime ? `Updated ${formattedTime}` : "Not updated yet"; } function getQuotaTone(percentage) { if (percentage > 70) { return { bar: "bg-green-500", dot: "bg-green-500", text: "text-green-500" }; } if (percentage >= 30) { return { bar: "bg-yellow-500", dot: "bg-yellow-500", text: "text-yellow-500" }; } return { bar: "bg-red-500", dot: "bg-red-500", text: "text-red-500" }; } function TokenQuotaResetStatus({ quota }) { const [now, setNow] = useState(() => new Date()); useEffect(() => { if (!quota.resetAt) return undefined; const intervalId = window.setInterval(() => setNow(new Date()), 60 * 1000); return () => window.clearInterval(intervalId); }, [quota.resetAt]); const countdown = formatResetTime(quota.resetAt, now); const isSession = quota.windowType === USER_TOKEN_LIMIT_WINDOWS.SESSION; const text = countdown === "-" ? (isSession ? "Session begins with the next request" : "Reset time unavailable") : (isSession ? `Next tokens restore in ${countdown}` : `Resets in ${countdown}`); return ( {text} ); } function QuotaListRow({ quota }) { const tone = getQuotaTone(quota.remainingPercentage); return (
  • {quota.name}
  • ); } function TokenQuotaListRow({ quota }) { const isUnlimited = quota.isUnlimited === true; const tone = isUnlimited ? null : getQuotaTone(quota.remainingPercentage); return (
  • {quota.name}
    {isUnlimited ? ( Unlimited ) : ( )}
    {!isUnlimited && (
    )}
  • ); } function ProviderQuotaListItem({ provider }) { const providerInfo = getProviderInfo(provider.provider); const providerName = providerInfo.name || provider.provider; const hasQuotaData = provider.quotas.length > 0; const isPersonalTokenBudget = provider.quotaSource === "user-token-limit"; return (

    {providerName}

    {hasQuotaData ? ( ) : (
    {provider.failedAccountCount > 0 ? provider.errorMessage || "Quota data is temporarily unavailable for this provider." : "This provider does not currently report quota data."}
    )} {provider.hasFailedQuotaChecks && hasQuotaData && (

    Some quota checks could not be completed.

    )}
    ); } function OverviewSkeleton() { return ( {[1, 2, 3].map((key) => (
    ))}
    ); } export default function SystemQuotaOverview() { const [data, setData] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const loadQuota = useCallback(async (forceRefresh = false) => { if (forceRefresh) setRefreshing(true); setError(null); try { const response = await fetch( `/api/usage/system-quota${forceRefresh ? "?refresh=true" : ""}`, { cache: "no-store" }, ); const payload = await response.json().catch(() => ({})); if (!response.ok) { throw new Error(payload.error || "Failed to load system quota"); } setData(payload); } catch (loadError) { setError(loadError.message || "Failed to load system quota"); } finally { setLoading(false); setRefreshing(false); } }, []); useEffect(() => { const initialLoadId = window.setTimeout(() => loadQuota(), 0); const intervalId = window.setInterval(() => loadQuota(true), REFRESH_INTERVAL_MS); return () => { window.clearTimeout(initialLoadId); window.clearInterval(intervalId); }; }, [loadQuota]); if (loading) return ; if (error) { return ( error

    Unable to load system quota

    {error}

    ); } const providers = data?.providers || []; return (
    data_usage System quota

    Available provider capacity

    {formatUpdatedAt(data?.updatedAt)}
    {providers.length === 0 ? ( cloud_off

    No quota-capable providers connected

    System quota will appear when an administrator connects a provider that supports usage tracking.

    ) : ( {providers.map((provider, index) => (
    0 ? "border-t border-border-subtle" : ""}>
    ))}
    )}
    ); }