"use client"; import { cn } from "@app/lib/cn"; import { useSubscriptionStatusContext } from "@app/hooks/useSubscriptionStatusContext"; import { useParams } from "next/navigation"; import Link from "next/link"; import { ClockIcon, ArrowRight } from "lucide-react"; import { ProgressBackwards } from "@app/components/ui/progress-backwards"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@app/components/ui/tooltip"; import { useTranslations } from "next-intl"; const TRIAL_DURATION_DAYS = 10; export default function ShowTrialCard({ isCollapsed, isOwner = false }: { isCollapsed?: boolean; isOwner?: boolean; }) { const context = useSubscriptionStatusContext(); const params = useParams(); const orgId = params?.orgId as string | undefined; const t = useTranslations(); const trialExpiresAt = context?.trialExpiresAt ?? null; if (trialExpiresAt == null) return null; const now = Date.now(); const remainingMs = trialExpiresAt - now; const remainingDays = Math.max( 0, Math.ceil(remainingMs / (1000 * 60 * 60 * 24)) ); const totalMs = TRIAL_DURATION_DAYS * 24 * 60 * 60 * 1000; const progressPct = Math.min( 100, Math.max(0, ((now - (trialExpiresAt - totalMs)) / totalMs) * 100) ); // Inverted: full bar at start, drains to empty as trial ends const displayPct = 100 - progressPct; const billingHref = orgId ? `/${orgId}/settings/billing` : "/"; if (isCollapsed) { const icon = (

{remainingDays === 0 ? t("trialExpired") : t("trialDaysLeftShort", { days: remainingDays })}

); if (isOwner) { return {icon}; } return icon; } const cardContent = ( <>

{remainingDays === 0 ? t("trialExpired") : t("trialActive")}

{remainingDays === 0 ? t("trialHasEnded") : t("trialDaysRemaining", { count: remainingDays })} {isOwner && (
{t("trialGoToBilling")}
)}
); if (isOwner) { return ( {cardContent} ); } return (
{cardContent}
); }