"use client"; import { Activity } from "lucide-react"; import { useEffect, useState } from "react"; import { StripeSubscriptionInterface, StripeSubscriptionService } from "../../../stripe-subscription"; import { MeterInterface, MeterSummaryInterface } from "../../data/stripe-usage.interface"; import { StripeUsageService } from "../../data/stripe-usage.service"; import { UsageSummaryCards } from "../widgets/UsageSummaryCards"; export function UsageContainer() { const [meters, setMeters] = useState([]); const [summaries, setSummaries] = useState>({}); const [loading, setLoading] = useState(true); const [subscriptions, setSubscriptions] = useState([]); useEffect(() => { loadUsageData(); }, []); const loadUsageData = async () => { setLoading(true); try { // First, check if there are any metered subscriptions const fetchedSubscriptions = await StripeSubscriptionService.listSubscriptions(); setSubscriptions(fetchedSubscriptions); const hasMeteredSubscriptions = fetchedSubscriptions.some((sub) => sub.price?.recurring?.usageType === "metered"); if (!hasMeteredSubscriptions) { setLoading(false); return; } // Load meters const fetchedMeters = await StripeUsageService.listMeters(); setMeters(fetchedMeters); // Load summaries for each meter (current month) const summariesMap: Record = {}; const now = new Date(); const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1); const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999); for (const meter of fetchedMeters) { try { const meterSummaries = await StripeUsageService.getMeterSummaries({ meterId: meter.id, startTime: startOfMonth, endTime: endOfMonth, }); // Use the first (most recent) summary summariesMap[meter.id] = meterSummaries.length > 0 ? meterSummaries[0] : null; } catch (error) { console.error(`[UsageContainer] Failed to load summaries for meter ${meter.id}:`, error); summariesMap[meter.id] = null; } } setSummaries(summariesMap); } catch (error) { console.error("[UsageContainer] Failed to load usage data:", error); } finally { setLoading(false); } }; // Check if there are any metered subscriptions const hasMeteredSubscriptions = subscriptions.some((sub) => sub.price?.recurring?.usageType === "metered"); // Don't render if no metered subscriptions if (!loading && !hasMeteredSubscriptions) { return null; } if (loading) { return (

Loading usage data...

); } return (
{/* Header */}

Usage Tracking

{/* Empty State */} {meters.length === 0 && (

No usage meters configured

Usage tracking will appear here when you have metered subscriptions with configured meters.

)} {/* Usage Summary Cards */} {meters.length > 0 && }
); }