import { getBranding } from '@/lib/branding/service' export interface ConsentExpiryEmailData { bankName: string daysUntilExpiry: number renewalUrl: string /** The company the bank connection belongs to. Shown so the recipient knows * which of their companies the email concerns; never used as the sender. */ companyName: string isExpired: boolean } /** * Consent expiry notification emails. * * Tone and layout are deliberately calm: a PSD2 consent running out is * routine, not an incident. No red, no urgency chrome; the email is signed * by the app (never the recipient's own company), states plainly why the * recipient got it, and shows the destination URL in plain text next to the * button so it does not pattern-match phishing. */ const SERIF = `Georgia, 'Times New Roman', serif` const SANS = `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif` function dagar(n: number): string { return `${n} ${n === 1 ? 'dag' : 'dagar'}` } /** * Generate HTML email for consent expiry notification */ export function generateConsentExpiryEmailHtml(data: ConsentExpiryEmailData): string { const { bankName, daysUntilExpiry, renewalUrl, companyName, isExpired } = data const { appName, supportEmail } = getBranding() const title = isExpired ? 'Bankkopplingen behöver förnyas' : `Bankkopplingen löper ut om ${dagar(daysUntilExpiry)}` const intro = isExpired ? `Banksamtycket för ${bankName} har löpt ut och den automatiska hämtningen av nya transaktioner är pausad.` : `Banksamtycket för ${bankName} löper ut om ${dagar(daysUntilExpiry)}.` const explanation = 'Det här är väntat: av säkerhetsskäl gäller ett banksamtycke (PSD2) bara en begränsad tid, och därefter behöver det godkännas på nytt hos banken.' const consequence = isExpired ? 'Ingenting har försvunnit. Redan hämtade transaktioner och din bokföring påverkas inte, och när kopplingen är förnyad hämtas mellanliggande transaktioner ikapp.' : 'Förnya gärna i förväg så fortsätter transaktionerna att hämtas utan avbrott. Din bokföring påverkas inte.' return ` ${title}
${appName}

${title}

${intro}

${explanation}

${consequence}

${companyName ? ` ` : ''}
Bank ${bankName}
Företag ${companyName}
Förnya bankkopplingen

Knappen leder till ${renewalUrl}.
Du kan också logga in som vanligt och gå till Inställningar och sedan Bank.

Med vänliga hälsningar,
${appName}

Du får det här mejlet eftersom det finns en bankkoppling i ${appName}${companyName ? ` för ${companyName}` : ''}. Undrar du något? Mejla ${supportEmail}.

` } /** * Generate plain text email for consent expiry notification */ export function generateConsentExpiryEmailText(data: ConsentExpiryEmailData): string { const { bankName, daysUntilExpiry, renewalUrl, companyName, isExpired } = data const { appName, supportEmail } = getBranding() let text = '' if (isExpired) { text += `Bankkopplingen behöver förnyas\n\n` text += `Banksamtycket för ${bankName} har löpt ut och den automatiska hämtningen av nya transaktioner är pausad.\n\n` } else { text += `Bankkopplingen löper ut om ${dagar(daysUntilExpiry)}\n\n` text += `Banksamtycket för ${bankName} löper ut om ${dagar(daysUntilExpiry)}.\n\n` } text += `Det här är väntat: av säkerhetsskäl gäller ett banksamtycke (PSD2) bara en begränsad tid, och därefter behöver det godkännas på nytt hos banken.\n\n` if (isExpired) { text += `Ingenting har försvunnit. Redan hämtade transaktioner och din bokföring påverkas inte, och när kopplingen är förnyad hämtas mellanliggande transaktioner ikapp.\n\n` } else { text += `Förnya gärna i förväg så fortsätter transaktionerna att hämtas utan avbrott. Din bokföring påverkas inte.\n\n` } text += `Bank: ${bankName}\n` if (companyName) text += `Företag: ${companyName}\n` text += `\nFörnya bankkopplingen: ${renewalUrl}\n` text += `Du kan också logga in som vanligt och gå till Inställningar och sedan Bank.\n\n` text += `Med vänliga hälsningar,\n` text += `${appName}\n\n` text += `Du får det här mejlet eftersom det finns en bankkoppling i ${appName}${companyName ? ` för ${companyName}` : ''}. Undrar du något? Mejla ${supportEmail}.\n` return text } /** * Generate email subject for consent expiry notification */ export function generateConsentExpiryEmailSubject(data: ConsentExpiryEmailData): string { const suffix = data.companyName ? ` - ${data.companyName}` : '' if (data.isExpired) { return `Förnya bankkopplingen till ${data.bankName}${suffix}` } return `Bankkopplingen till ${data.bankName} löper ut om ${dagar(data.daysUntilExpiry)}${suffix}` }