import { Link } from "@tanstack/react-router"; import { ArrowRight, Clock, Sparkles, Zap } from "lucide-react"; import { useSubscription, useTrialDaysRemaining } from "@/lib/billing"; import { cn } from "@/lib/utils"; import { formatDate } from "@/lib/format"; /** * Banner d'enforcement plan Free. * * - "Essai" : essai 14 j actif → countdown rubis (toujours affiché) * - Hidden : plan Pro/Business OU période de grâce active * - "Approche" : ratio ≥ 80 % du quota → ton conseil * - "Atteinte" : ratio ≥ 100 % du quota → ton blocant + CTA upgrade * * Posé en haut de /factures et /factures/import. Pas dans le dashboard * pour ne pas polluer la lecture des KPIs. */ export function PlanLimitBanner({ className }: { className?: string }) { const { data: sub } = useSubscription(); const trialDays = useTrialDaysRemaining(); if (!sub) return null; // Essai 14 j Pro actif → countdown discret rubis-glow, toujours visible // pendant la fenêtre. Pas blocant — l'user a accès Pro complet. if (sub.inTrial && trialDays !== null) { const dayLabel = trialDays > 1 ? "jours" : "jour"; return (
Essai Pro — plus que{" "} {trialDays} {dayLabel} {sub.trialEndsAt ? ( <> {" · prélèvement le "} {formatDate(sub.trialEndsAt)} > ) : null}
GérerPériode de grâce{" "} — illimité jusqu'au{" "} {formatDate(sub.gracePeriodEndsAt)} . Au-delà, le plan Free est plafonné à {limit} factures actives.
{reached ? "Limite Free atteinte" : `Bientôt à la limite (${sub.activeInvoicesCount}/${limit})`}
{reached ? `Vous avez utilisé vos ${limit} factures actives gratuites. Passez Pro pour continuer à importer et relancer sans contrainte.` : "Vous approchez de la limite Free. Passer Pro maintenant évite l'interruption."}