'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 (
) if (subscriptionError) return (

Failed to load subscription information

) return (

{currentSubscription?.plan?.name || 'Free Plan'}

Current subscription

{currentSubscription?.amount > 0 && ( {formatPrice( currentSubscription?.amount, currentSubscription?.currency )} {currentSubscription?.recurringInterval && ( /{' '} {getBillingInterval(currentSubscription?.recurringInterval)} )} )}
{currentSubscription?.status ? currentSubscription.status .split('_') .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(' ') : 'Active'}

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)

)}

{!currentSubscription?.plan?.name || currentSubscription?.plan?.name?.toLowerCase() === 'free' ? ( Upgrade to Pro → ) : ( Manage Subscription → )}
) }