import type { Invoice, Customer, CompanySettings } from '@/types' import { formatCurrency, formatDate } from '@/lib/utils' export interface ReminderEmailData { invoice: Invoice customer: Customer company: CompanySettings reminderLevel: 1 | 2 | 3 daysOverdue: number actionUrl: string // URL for customer to mark as paid or dispute } // Reminder level configurations const REMINDER_CONFIG = { 1: { title: 'Vänlig påminnelse', tone: 'friendly', daysAfterDue: 15 }, 2: { title: 'Andra påminnelsen', tone: 'firm', daysAfterDue: 30 }, 3: { title: 'Slutlig påminnelse', tone: 'urgent', daysAfterDue: 45 } } as const /** * Generate HTML email for payment reminder */ export function generateReminderEmailHtml(data: ReminderEmailData): string { const { invoice, customer, company, reminderLevel, daysOverdue, actionUrl } = data const config = REMINDER_CONFIG[reminderLevel] // Different styling based on urgency const headerColor = reminderLevel === 3 ? '#dc2626' : reminderLevel === 2 ? '#ea580c' : '#2563eb' const buttonColor = reminderLevel === 3 ? '#dc2626' : reminderLevel === 2 ? '#ea580c' : '#2563eb' return ` ${config.title} - Faktura ${invoice.invoice_number}
${config.title}

Faktura ${invoice.invoice_number} förföll för ${daysOverdue} dagar sedan

Hej${customer.name ? ` ${customer.name.split(' ')[0]}` : ''},

${reminderLevel === 1 ? `

Vi vill påminna dig om att faktura ${invoice.invoice_number} förföll till betalning den ${formatDate(invoice.due_date)}. Om du redan har betalat kan du bortse från denna påminnelse.

` : reminderLevel === 2 ? `

Trots vår tidigare påminnelse har vi ännu inte mottagit betalning för faktura ${invoice.invoice_number} som förföll den ${formatDate(invoice.due_date)}.

Vi ber dig vänligen att omgående reglera detta belopp för att undvika ytterligare åtgärder.

` : `

Detta är vår slutliga påminnelse gällande faktura ${invoice.invoice_number}.

Fakturan förföll till betalning den ${formatDate(invoice.due_date)} och vi har ännu inte mottagit betalning trots tidigare påminnelser.

Om betalning inte inkommer inom 7 dagar kommer ärendet att överlämnas för vidare hantering.

`}
Fakturanummer: ${invoice.invoice_number}
Fakturadatum: ${formatDate(invoice.invoice_date)}
Förfallodatum: ${formatDate(invoice.due_date)}
Belopp att betala: ${formatCurrency(invoice.total, invoice.currency)}

Betalningsinformation

${company.bank_name ? ` ` : ''} ${company.clearing_number && company.account_number ? ` ` : ''} ${company.iban ? ` ` : ''} ${company.bic ? ` ` : ''}
Bank: ${company.bank_name}
Kontonummer: ${company.clearing_number}-${company.account_number}
IBAN: ${company.iban}
BIC/SWIFT: ${company.bic}
Meddelande: ${invoice.invoice_number}

Har du redan betalat eller har frågor om fakturan?

Hantera faktura

Har du frågor? Svara direkt på detta mejl så hjälper vi dig.

Med vänliga hälsningar,
${company.company_name}

${company.org_number ? `

Org.nr: ${company.org_number} ${company.vat_number ? ` | VAT: ${company.vat_number}` : ''}

` : ''}

Detta är ett automatiskt meddelande angående en obetald faktura.

` } /** * Generate plain text email for payment reminder */ export function generateReminderEmailText(data: ReminderEmailData): string { const { invoice, customer, company, reminderLevel, daysOverdue, actionUrl } = data const config = REMINDER_CONFIG[reminderLevel] let text = `${config.title.toUpperCase()}\n` text += `Faktura ${invoice.invoice_number} förföll för ${daysOverdue} dagar sedan\n` text += `=`.repeat(50) + `\n\n` text += `Hej${customer.name ? ` ${customer.name.split(' ')[0]}` : ''},\n\n` if (reminderLevel === 1) { text += `Vi vill påminna dig om att faktura ${invoice.invoice_number} förföll till betalning den ${formatDate(invoice.due_date)}.\n` text += `Om du redan har betalat kan du bortse från denna påminnelse.\n\n` } else if (reminderLevel === 2) { text += `Trots vår tidigare påminnelse har vi ännu inte mottagit betalning för faktura ${invoice.invoice_number} som förföll den ${formatDate(invoice.due_date)}.\n\n` text += `Vi ber dig vänligen att omgående reglera detta belopp för att undvika ytterligare åtgärder.\n\n` } else { text += `DETTA ÄR VÅR SLUTLIGA PÅMINNELSE\n\n` text += `Fakturan förföll till betalning den ${formatDate(invoice.due_date)} och vi har ännu inte mottagit betalning trots tidigare påminnelser.\n\n` text += `Om betalning inte inkommer inom 7 dagar kommer ärendet att överlämnas för vidare hantering.\n\n` } text += `Fakturasammanfattning:\n` text += `-`.repeat(30) + `\n` text += `Fakturanummer: ${invoice.invoice_number}\n` text += `Fakturadatum: ${formatDate(invoice.invoice_date)}\n` text += `Förfallodatum: ${formatDate(invoice.due_date)}\n` text += `Belopp att betala: ${formatCurrency(invoice.total, invoice.currency)}\n` text += `-`.repeat(30) + `\n\n` text += `Betalningsinformation:\n` if (company.bank_name) text += `Bank: ${company.bank_name}\n` if (company.clearing_number && company.account_number) { text += `Kontonummer: ${company.clearing_number}-${company.account_number}\n` } if (company.iban) text += `IBAN: ${company.iban}\n` if (company.bic) text += `BIC/SWIFT: ${company.bic}\n` text += `Meddelande: ${invoice.invoice_number}\n\n` text += `Har du redan betalat eller har frågor om fakturan?\n` text += `Hantera faktura: ${actionUrl}\n\n` text += `Har du frågor? Svara direkt på detta mejl så hjälper vi dig.\n\n` text += `Med vänliga hälsningar,\n` text += `${company.company_name}\n` if (company.org_number) { text += `\nOrg.nr: ${company.org_number}` if (company.vat_number) text += ` | VAT: ${company.vat_number}` text += `\n` } return text } /** * Generate email subject for payment reminder */ export function generateReminderEmailSubject(data: ReminderEmailData): string { const { invoice, reminderLevel } = data const config = REMINDER_CONFIG[reminderLevel] return `${config.title}: Faktura ${invoice.invoice_number} - ${formatCurrency(invoice.total, invoice.currency)}` } /** * Get the number of days after due date for each reminder level */ export function getReminderDaysConfig(): Record<1 | 2 | 3, number> { return { 1: REMINDER_CONFIG[1].daysAfterDue, 2: REMINDER_CONFIG[2].daysAfterDue, 3: REMINDER_CONFIG[3].daysAfterDue } }