import { CreditCard } from "lucide-react"; import type { ReactNode } from "react"; export function BillingHeader(args: { hasManagedServiceAccess: boolean; basePlanName: string; includedCreditsLabel: string; }) { return (
Hosted billing

{args.hasManagedServiceAccess ? "Billing" : "Choose a plan"}

{args.hasManagedServiceAccess ? `${args.basePlanName} includes ${args.includedCreditsLabel} of usage credits each month. Monthly credits are used first; purchased top-ups never expire.` : `You need an active ${args.basePlanName} subscription to use OpenSEO's managed service. It includes ${args.includedCreditsLabel} of usage credits each month, and you can buy more at any time.`}

); } export function SubscriptionIntro(args: { hasManagedServiceAccess: boolean; basePlanName: string; }) { return (

{args.hasManagedServiceAccess ? "Subscription" : "Managed service access"}

{args.hasManagedServiceAccess ? "Hosted workspaces need an active paid plan before project pages and DataForSEO-backed features are available." : `Start ${args.basePlanName} to unlock OpenSEO's managed service and your included monthly credits.`}

); } export function SubscriptionStatusCard(args: { hasManagedServiceAccess: boolean; basePlanName: string; basePlanPrice: string; includedCreditsLabel: string; }) { return (
{args.hasManagedServiceAccess ? "Current status" : args.basePlanName}
{args.hasManagedServiceAccess ? "Active" : args.basePlanPrice}
{args.hasManagedServiceAccess ? "Your organization can use hosted OpenSEO features." : `Includes ${args.includedCreditsLabel} of usage credits every cycle.`}
); } export function BillingAlerts(args: { actionError: string | null; hasManagedServiceAccess: boolean; basePlanName: string; }) { return ( <> {args.actionError ? (
{args.actionError}
) : null} {!args.hasManagedServiceAccess ? (
Subscribe to {args.basePlanName} first. After that, you can manage your plan and buy more credits here.
) : null} ); } export function CenteredCard(args: { title: string; body: string; action?: ReactNode; }) { return (

{args.title}

{args.body}

{args.action ? (
{args.action}
) : null}
); }