import { CONDITIONS_FINANCIERES_SALLE_TEXT, SALLE_FREQUENCY_LABELS, SALLE_USAGE_TYPE_LABELS, type SallePricingSummary } from "@shared/sallePricing"; function escapeHtml(value: string) { return value .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } function formatCurrency(cents: number) { return new Intl.NumberFormat("fr-FR", { style: "currency", currency: "EUR" }).format(cents / 100); } export function generateSalleQuoteEmail(input: { associationName: string; requestTitle: string; pricing: SallePricingSummary; acceptUrl: string; refuseUrl: string; decisionText: string; }) { const total = formatCurrency(input.pricing.totalAmountCents); const conditionLines = CONDITIONS_FINANCIERES_SALLE_TEXT.split("\n").filter(Boolean); const decisionLines = input.decisionText.split("\n").filter(Boolean); const isBilled = input.pricing.totalAmountCents > 0; const subject = isBilled ? `Validation du devis - ${input.requestTitle}` : `Validation de la mise à disposition - ${input.requestTitle}`; const intro = isBilled ? `Bonjour ${input.associationName},\n\nVous trouverez ci-joint le devis, les conditions financières et la décision administrative prioritaire relatives à votre demande de réservation.` : `Bonjour ${input.associationName},\n\nVous trouverez ci-joint les conditions financières et la décision administrative prioritaire relatives à votre demande de réservation.`; const amountBlock = isBilled ? `Type d'usage : ${SALLE_USAGE_TYPE_LABELS[input.pricing.usageType]} Fréquence : ${SALLE_FREQUENCY_LABELS[input.pricing.frequency]} Montant calculé automatiquement : ${total}` : `Type d'usage : ${SALLE_USAGE_TYPE_LABELS[input.pricing.usageType]} Fréquence : ${SALLE_FREQUENCY_LABELS[input.pricing.frequency]} Mise à disposition sans facturation.`; const text = `${intro} ${amountBlock} Pour poursuivre le traitement de votre dossier, merci d'utiliser l'un des liens suivants : - J'accepte : ${input.acceptUrl} - Je refuse : ${input.refuseUrl} Conditions financières : ${conditionLines.join("\n")} Décision administrative : ${decisionLines.join("\n")} Maison de la Jeunesse des Savanes - Mélissa ALVES`; const html = `
Bonjour ${escapeHtml(input.associationName)},
${escapeHtml(isBilled ? "Vous trouverez ci-joint le devis, les conditions financières et la décision administrative prioritaire relatives à votre demande de réservation." : "Vous trouverez ci-joint les conditions financières et la décision administrative prioritaire relatives à votre demande de réservation.")}
Type d'usage : ${escapeHtml(SALLE_USAGE_TYPE_LABELS[input.pricing.usageType])}
Fréquence : ${escapeHtml(SALLE_FREQUENCY_LABELS[input.pricing.frequency])}
${escapeHtml(isBilled ? "Montant calculé automatiquement :" : "Conditions financières :")} ${escapeHtml(isBilled ? total : "Mise à disposition sans facturation")}
Merci de nous confirmer votre position :
Si les boutons ne fonctionnent pas, utilisez directement ces liens :
${escapeHtml(input.acceptUrl)}
${escapeHtml(input.refuseUrl)}
Maison de la Jeunesse des Savanes - Mélissa ALVES