'use client' import { Calendar, Check, Info } from 'lucide-react' import { Badge } from '@/components/ui/badge' import { Spinner } from '@/components/ui/spinner' import { useQuery } from '@tanstack/react-query' import httpBrowserClient from '@/lib/httpBrowserClient' import { ApiEndpoints } from '@/config/api' import Link from 'next/link' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '@/components/ui/tooltip' export default function SubscriptionInfo() { const { data: currentSubscription, isLoading: isLoadingSubscription, error: subscriptionError, } = useQuery({ queryKey: ['currentSubscription'], queryFn: () => httpBrowserClient .get(ApiEndpoints.billing.currentSubscription()) .then((res) => res.data), }) // Format price with currency symbol const formatPrice = ( amount: number | null | undefined, currency: string | null | undefined ) => { if (amount == null || currency == null) return 'Free' const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: currency.toUpperCase() || 'USD', minimumFractionDigits: 2, }) return formatter.format(amount / 100) } const getBillingInterval = (interval: string | null | undefined) => { if (!interval) return '' return interval.toLowerCase() === 'month' ? 'monthly' : 'yearly' } if (isLoadingSubscription) return (
Failed to load subscription information
) return (Current subscription
{currentSubscription?.amount > 0 && (Start Date
{currentSubscription?.subscriptionStartDate ? new Date( currentSubscription?.subscriptionStartDate ).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric', }) : 'N/A'}
Next Payment
{currentSubscription?.currentPeriodEnd ? new Date( currentSubscription?.currentPeriodEnd ).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric', }) : 'N/A'}
Usage Limits
Daily
{currentSubscription?.plan?.dailyLimit === -1
? 'Unlimited'
: currentSubscription?.plan?.dailyLimit || '0'}
{currentSubscription?.plan?.dailyLimit === -1 && (
Unlimited (within monthly limit)
Monthly
{currentSubscription?.plan?.monthlyLimit === -1
? 'Unlimited'
: currentSubscription?.plan?.monthlyLimit?.toLocaleString() ||
'0'}
{currentSubscription?.plan?.monthlyLimit === -1 && (
Unlimited (within fair usage)
Bulk
{currentSubscription?.plan?.bulkSendLimit === -1
? 'Unlimited'
: currentSubscription?.plan?.bulkSendLimit || '0'}
{currentSubscription?.plan?.bulkSendLimit === -1 && (
Unlimited (within monthly limit)