/**
 * Portage direct de apps/content/emails.py.
 * Deux emails à chaque message de contact :
 *   1. Notification à l'équipe IGF Burundi
 *   2. Accusé de réception à l'expéditeur, dans sa langue
 */
const nodemailer = require("nodemailer");

const CONFIRMATION_SUBJECT = {
  fr: "Nous avons bien reçu votre message — IGF Burundi",
  en: "We've received your message — IGF Burundi",
};

const CONFIRMATION_BODY = {
  fr: ({ name, subjectLine }) =>
    `Bonjour ${name},\n\n` +
    `Nous vous confirmons la bonne réception de votre message${subjectLine}.\n\n` +
    `Notre équipe reviendra vers vous dans un délai de moins de 24 heures.\n\n` +
    `Cordialement,\nL'équipe IGF Burundi\nhttps://igf.bi`,
  en: ({ name, subjectLine }) =>
    `Hello ${name},\n\n` +
    `We confirm that we have received your message${subjectLine}.\n\n` +
    `Our team will get back to you within less than 24 hours.\n\n` +
    `Best regards,\nThe IGF Burundi team\nhttps://igf.bi`,
};

function getTransporter() {
  if (!process.env.EMAIL_HOST) return null;
  return nodemailer.createTransport({
    host: process.env.EMAIL_HOST,
    port: Number(process.env.EMAIL_PORT || 587),
    secure: process.env.EMAIL_SECURE === "true",
    auth: process.env.EMAIL_USER
      ? { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASSWORD }
      : undefined,
  });
}

async function sendContactNotifications(contactMessage) {
  const transporter = getTransporter();
  if (!transporter) {
    // Pas de SMTP configuré (ex: en développement) : on ne bloque pas
    // la requête, comme côté Django avec fail_silently géré au niveau
    // de la vue (l'échec est loggué, pas propagé).
    console.warn("EMAIL_HOST non configuré : notifications de contact non envoyées.");
    return;
  }

  const language = ["fr", "en"].includes(contactMessage.language) ? contactMessage.language : "fr";
  const subjectLine = contactMessage.subject ? ` ("${contactMessage.subject}")` : "";
  const from = process.env.DEFAULT_FROM_EMAIL || "IGF Burundi <contact@igf.bi>";

  // 1. Notification interne
  await transporter.sendMail({
    from,
    to: process.env.CONTACT_NOTIFICATION_EMAIL || "contact@igf.bi",
    subject: `Nouveau message de contact — ${contactMessage.name}`,
    text:
      `Nom : ${contactMessage.name}\n` +
      `E-mail : ${contactMessage.email}\n` +
      `Objet : ${contactMessage.subject || "(sans objet)"}\n\n` +
      `Message :\n${contactMessage.message}\n\n` +
      `— Voir dans l'admin : /admin/resources/ContactMessage/records/${contactMessage.id}/show`,
  });

  // 2. Accusé de réception
  await transporter.sendMail({
    from,
    to: contactMessage.email,
    subject: CONFIRMATION_SUBJECT[language],
    text: CONFIRMATION_BODY[language]({ name: contactMessage.name, subjectLine }),
  });
}

module.exports = { sendContactNotifications };
