import { Link, Section, Text } from '@react-email/components' import { baseStyles } from '@/components/emails/_styles' import { EmailLayout } from '@/components/emails/components' import { UPGRADE_REASON_COPY, type UpgradeReason } from '@/lib/billing/upgrade-reasons' import { getBrandConfig } from '@/ee/whitelabeling' interface LimitThresholdEmailProps { /** `warning` = approaching the limit (~80%); `reached` = at/over the limit. */ kind: 'warning' | 'reached' /** Limit category, drives the shared copy. */ reason: UpgradeReason userName?: string /** Pre-formatted current usage, e.g. "4.2 GB", "48,000 rows", "9 seats". */ usageLabel: string /** Pre-formatted limit, e.g. "5 GB", "50,000 rows", "10 seats". */ limitLabel: string percentUsed: number upgradeLink: string } /** * Single template for the per-category usage-limit emails (storage, tables, * seats). Copy comes from {@link UPGRADE_REASON_COPY} so the email language * matches the upgrade-page header the user lands on. */ export function LimitThresholdEmail({ kind, reason, userName, usageLabel, limitLabel, percentUsed, upgradeLink, }: LimitThresholdEmailProps) { const brand = getBrandConfig() const copy = UPGRADE_REASON_COPY[reason] const lead = kind === 'reached' ? copy.reachedLead : copy.warningLead const previewText = `${brand.name}: ${lead}` return ( {userName ? `Hi ${userName},` : 'Hi,'} {lead} Upgrade your plan for more {copy.noun}.
Usage {usageLabel} of {limitLabel} used ({percentUsed}%)
{/* Divider */}
Upgrade {/* Divider */}
{kind === 'reached' ? 'One-time notification at 100% usage.' : 'One-time notification at 80% usage.'} ) } export default LimitThresholdEmail