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}
);
}