import nodemailer, { type Transporter } from 'nodemailer';

export interface ContactPayload {
  firstName: string;
  lastName: string;
  email: string;
  message: string;
}

let transporter: Transporter | null = null;

const getTransporter = (): Transporter => {
  if (transporter) return transporter;

  transporter = nodemailer.createTransport({
    host: process.env.SMTP_HOST ?? 'smtp.gmail.com',
    port: Number(process.env.SMTP_PORT ?? 587),
    secure: false,
    auth: {
      user: process.env.SMTP_USER,
      pass: process.env.SMTP_PASS,
    },
  });

  return transporter;
};

const escapeHtml = (str: string) =>
  str.replace(/[&<>"']/g, (c) => ({
    '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;',
  }[c] ?? c));

export const ContactService = {
  async sendContactMessage(payload: ContactPayload) {
    const t = getTransporter();
    const safe = {
      firstName: escapeHtml(payload.firstName),
      lastName: escapeHtml(payload.lastName),
      email: escapeHtml(payload.email),
      message: escapeHtml(payload.message).replace(/\n/g, '<br/>'),
    };

    const adminHtml = `
      <div style="font-family:sans-serif;max-width:500px">
        <h2 style="color:#DBBB65">Nouveau message depuis le site Holyzen</h2>
        <ul>
          <li><strong>Nom :</strong> ${safe.firstName} ${safe.lastName}</li>
          <li><strong>Email :</strong> ${safe.email}</li>
        </ul>
        <p style="margin-top:16px"><strong>Message :</strong></p>
        <p style="background:#f5f0e6;padding:12px;border-radius:8px">${safe.message}</p>
      </div>
    `;

    const confirmationHtml = `
      <div style="font-family:sans-serif;color:#5D3F23;max-width:500px">
        <h2 style="color:#DBBB65">Votre message a bien été reçu</h2>
        <p>Bonjour ${safe.firstName},</p>
        <p>Merci de nous avoir contactés. Nous vous répondrons dans les plus brefs délais.</p>
        <p style="margin-top:24px">À bientôt,<br/><strong>L'équipe Holyzen</strong></p>
      </div>
    `;

    await Promise.all([
      t.sendMail({
        from: `"Holyzen Site" <${process.env.SMTP_USER}>`,
        to: process.env.SMTP_USER ?? 'contact@holyzen.fr',
        // to: process.env.ADMIN_EMAIL ?? 'contact@holyzen.fr',
        replyTo: payload.email,
        subject: `Nouveau message de ${safe.firstName} ${safe.lastName}`,
        html: adminHtml,
      }),
      t.sendMail({
        from: `"Holyzen" <${process.env.SMTP_USER}>`,
        to: payload.email,
        subject: 'Votre message a bien été reçu - Holyzen',
        html: confirmationHtml,
      }),
    ]);
  },
};