import React from 'react'; import { AlertTriangle, X, ExternalLink } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; import { QuotaOverage } from '../api/auth'; interface QuotaWarningBannerProps { overages: QuotaOverage[]; onDismiss?: () => void; } const QuotaWarningBanner: React.FC = ({ overages, onDismiss }) => { const { t } = useTranslation(); if (!overages || overages.length === 0) { return null; } // Find the most urgent overage (least days remaining) const mostUrgent = overages.reduce((prev, curr) => curr.days_remaining < prev.days_remaining ? curr : prev ); const isUrgent = mostUrgent.days_remaining <= 7; const isCritical = mostUrgent.days_remaining <= 1; const getBannerStyles = () => { if (isCritical) { return 'bg-red-600 text-white border-red-700'; } if (isUrgent) { return 'bg-amber-500 text-white border-amber-600'; } return 'bg-amber-100 text-amber-900 border-amber-300'; }; const getIconColor = () => { if (isCritical || isUrgent) { return 'text-white'; } return 'text-amber-600'; }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric', }); }; return (
{isCritical ? t('quota.banner.critical', 'URGENT: Automatic archiving tomorrow!') : isUrgent ? t('quota.banner.urgent', 'Action Required: {{days}} days left', { days: mostUrgent.days_remaining }) : t('quota.banner.warning', 'Quota exceeded for {{count}} item(s)', { count: overages.length }) } {t('quota.banner.details', 'You have {{overage}} {{type}} over your plan limit. Grace period ends {{date}}.', { overage: mostUrgent.overage_amount, type: mostUrgent.display_name, date: formatDate(mostUrgent.grace_period_ends_at) } )}
{t('quota.banner.manage', 'Manage Quota')} {onDismiss && ( )}
{/* Show additional overages if there are more than one */} {overages.length > 1 && (
{t('quota.banner.allOverages', 'All overages:')}
    {overages.map((overage) => (
  • {overage.display_name}: {overage.current_usage}/{overage.allowed_limit} ({t('quota.banner.overBy', 'over by {{amount}}', { amount: overage.overage_amount })}) {' - '} {overage.days_remaining <= 0 ? t('quota.banner.expiredToday', 'expires today!') : t('quota.banner.daysLeft', '{{days}} days left', { days: overage.days_remaining }) }
  • ))}
)}
); }; export default QuotaWarningBanner;