import type { Metadata } from "next" import { CalendarIcon, DollarSign, Users } from "lucide-react" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { ManageSubscriptionButton } from "./manageSubscriptionButton" import { getSubscriptionData, getCurrentUserRole, getSubscriptionBillingEmail } from "@/actions" import { isServiceError } from "@/lib/utils" import { ChangeBillingEmailCard } from "./changeBillingEmailCard" export const metadata: Metadata = { title: "Billing | Settings", description: "Manage your subscription and billing information", } interface BillingPageProps { params: { domain: string } } export default async function BillingPage({ params: { domain }, }: BillingPageProps) { const subscription = await getSubscriptionData(domain) if (isServiceError(subscription)) { return
Failed to fetch subscription data. Please contact us at team@sourcebot.dev if this issue persists.
} if (!subscription) { return
todo
} const currentUserRole = await getCurrentUserRole(domain) if (isServiceError(currentUserRole)) { return
Failed to fetch user role. Please contact us at team@sourcebot.dev if this issue persists.
} const billingEmail = await getSubscriptionBillingEmail(domain); if (isServiceError(billingEmail)) { return
Failed to fetch billing email. Please contact us at team@sourcebot.dev if this issue persists.
} return (

Billing

Manage your subscription and billing information

{/* Billing Email Card */} Subscription Plan {subscription.status === "trialing" ? "You are currently on a free trial" : `You are currently on the ${subscription.plan} plan.`}

Seats

{subscription.seats} active users

{subscription.status === "trialing" ? "Trial End Date" : "Next Billing Date"}

{new Date(subscription.nextBillingDate * 1000).toLocaleDateString()}

Billing Amount

${(subscription.perSeatPrice * subscription.seats).toFixed(2)} per month

) }