"use client"; import { AlertCircle } from "lucide-react"; import { Button } from "../../../../shadcnui"; import { StripeSubscriptionInterface, SubscriptionStatus } from "../../stripe-subscription"; type BillingAlertBannerProps = { subscription: StripeSubscriptionInterface; onUpdatePayment?: () => void; onAddPayment?: () => void; }; export function BillingAlertBanner({ subscription, onUpdatePayment, onAddPayment }: BillingAlertBannerProps) { // Payment failed alert (past_due) if (subscription.status === SubscriptionStatus.PAST_DUE) { return (

Payment Failed

Your last payment failed. Please update your payment method to avoid service interruption.

{onUpdatePayment && ( )}
); } // Trial ending soon alert (trialing with ≤7 days remaining) if (subscription.status === SubscriptionStatus.TRIALING && subscription.trialEnd) { const trialEnd = new Date(subscription.trialEnd); const now = new Date(); const daysRemaining = Math.ceil((trialEnd.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)); if (daysRemaining <= 7) { return (

Trial Ending Soon

Your trial ends in {daysRemaining} {daysRemaining === 1 ? "day" : "days"}. Add a payment method to continue your subscription.

{onAddPayment && ( )}
); } } // No critical state return null; }