"use client";
import Link from "next/link";
import type { TrialState } from "../types";
export function TrialBanner({ trial }: { trial: TrialState | null | undefined }) {
if (!trial) return null;
if (!trial.active) {
const expired =
(typeof trial.days_remaining === "number" && trial.days_remaining <= 0) ||
(trial.ends_at && new Date(trial.ends_at).getTime() < Date.now());
if (!expired) return null;
return (
دوره آزمایشی منقضی شده است
ارتقا فوری
برای ادامه قابلیتهای قفلشده، اشتراک را فعال کنید.
);
}
const days = trial.days_remaining;
const urgent = typeof days === "number" && days <= 3;
const tone = urgent
? "border-orange-300 bg-orange-50 text-orange-950 dark:border-orange-800 dark:bg-orange-950/30 dark:text-orange-100"
: "border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-800 dark:bg-amber-950/30 dark:text-amber-100";
return (
{urgent ? "هشدار: " : ""}
دوره آزمایشی فعال است
{typeof days === "number" ? (
— {days} روز باقیمانده
) : null}
{trial.ends_at ? (
({new Date(trial.ends_at).toLocaleDateString("fa-IR")})
) : null}
ارتقا به اشتراک
{urgent ? (
قبل از انقضا ارتقا دهید تا قفل قابلیتها فعال نشود.
) : null}
{trial.quotas && trial.quotas.length > 0 ? (
{trial.quotas.map((q) => {
const nearLimit =
typeof q.used === "number" &&
typeof q.limit === "number" &&
q.limit > 0 &&
q.used / q.limit >= 0.8;
return (
-
{q.label || q.key}: {q.used ?? "—"} / {q.limit ?? "∞"}
{nearLimit ? " · نزدیک سقف" : ""}
);
})}
) : null}
);
}
export function SubscriptionBanner({
status,
planName,
}: {
status?: string | null;
planName?: string | null;
}) {
if (!status) {
return (
اشتراک ثبت نشده است.{" "}
شروع trial یا انتخاب پلن
);
}
const tone =
status === "active"
? "border-emerald-200 bg-emerald-50 text-emerald-900 dark:border-emerald-800 dark:bg-emerald-950/30 dark:text-emerald-100"
: status === "trialing"
? "border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-800 dark:bg-amber-950/30 dark:text-amber-100"
: status === "past_due" || status === "expired" || status === "suspended"
? "border-red-200 bg-red-50 text-red-900 dark:border-red-900 dark:bg-red-950/40 dark:text-red-100"
: "border-gray-200 bg-gray-50 text-gray-800 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200";
return (
وضعیت اشتراک: {status}
{planName ? (
<>
{" "}
· پلن: {planName}
>
) : null}
{(status === "past_due" || status === "expired" || status === "suspended") && (
<>
{" "}
رفع مشکل / ارتقا
>
)}
);
}