import { sendMail } from "@/lib/mail";
import { emailShell } from "@/lib/emailTemplate";
import { formatEUR } from "@/lib/orderConstants";

async function safeSend(fn: () => Promise<void>) {
  try {
    await fn();
  } catch (err) {
    console.error("Gutschein-Benachrichtigung fehlgeschlagen:", err);
  }
}

// Verschickt den fertigen Code an den Käufer, sobald der Gutschein bezahlt
// ist (egal ob per Stripe oder von Rakku manuell bestätigt) — bewusst nur an
// den Käufer, nicht an die/den Beschenkte(n) direkt, damit die Überraschung
// nicht vom System verraten wird.
export function sendVoucherCode(voucher: {
  purchaserName: string;
  purchaserEmail: string;
  recipientName: string;
  amount: number;
  code: string;
  locale: "de" | "en";
}) {
  return safeSend(async () => {
    const isEn = voucher.locale === "en";
    const html = await emailShell({
      heading: `Hi ${voucher.purchaserName},`,
      bodyHtml: isEn
        ? `
        <p>your gift voucher for <strong>${formatEUR(voucher.amount)}</strong>${
            voucher.recipientName ? ` for ${voucher.recipientName}` : ""
          } is ready.</p>
        <p style="margin-top:16px;font-size:20px;letter-spacing:2px;font-weight:700;color:#101012;">${voucher.code}</p>
        <p style="margin-top:16px;">The code can be redeemed on any booking on rakku.de in the "discount code" field — pass it on or print it out.</p>
      `
        : `
        <p>dein Geschenkgutschein über <strong>${formatEUR(voucher.amount)}</strong>${
            voucher.recipientName ? ` für ${voucher.recipientName}` : ""
          } ist fertig.</p>
        <p style="margin-top:16px;font-size:20px;letter-spacing:2px;font-weight:700;color:#101012;">${voucher.code}</p>
        <p style="margin-top:16px;">Der Code kann bei jeder Buchung auf rakku.de im Feld „Rabattcode" eingelöst werden — einfach weitergeben oder ausdrucken.</p>
      `,
      buttonLabel: isEn ? "Book now" : "Jetzt buchen",
      buttonUrl: `${process.env.SITE_URL}/${voucher.locale}/angebote`,
      footerNote: isEn ? "This voucher is valid for 3 years." : "Der Gutschein ist 3 Jahre gültig.",
    });
    await sendMail(voucher.purchaserEmail, isEn ? "Your gift voucher — Rakku Photography" : "Dein Geschenkgutschein — Rakku Photography", html);
  });
}

// Bei einer Anfrage ohne sofortige Online-Zahlung (Stripe nicht aktiv) —
// informiert Rakku, damit sie/er sich wegen der Zahlungsdetails meldet.
// Bewusst immer auf Deutsch — geht nur an Rakku selbst, nie an Kund:innen.
export function notifyAdminVoucherRequested(adminEmail: string, voucher: { purchaserName: string; purchaserEmail: string; amount: number; message: string }) {
  return safeSend(async () => {
    if (!adminEmail) return;
    const html = await emailShell({
      heading: "Neue Gutschein-Anfrage",
      bodyHtml: `
        <p><strong>${voucher.purchaserName}</strong> (${voucher.purchaserEmail}) möchte einen Gutschein über <strong>${formatEUR(voucher.amount)}</strong> kaufen.</p>
        ${voucher.message ? `<p style="margin-top:12px;">Nachricht: „${voucher.message}"</p>` : ""}
        <p style="margin-top:16px;">Zahlungsdetails abstimmen und den Gutschein anschließend im Admin-Bereich als bezahlt markieren.</p>
      `,
      buttonLabel: "Gutscheine verwalten",
      buttonUrl: `${process.env.SITE_URL}/de/admin/vouchers`,
      footerNote: "Automatische Benachrichtigung von rakku.de",
    });
    await sendMail(adminEmail, "Neue Gutschein-Anfrage — Rakku Photography", html);
  });
}

// Bestätigung an den Käufer, wenn die Zahlung manuell erfolgt (kein Stripe-Checkout).
export function notifyPurchaserVoucherPending(voucher: { purchaserName: string; purchaserEmail: string; amount: number; locale: "de" | "en" }) {
  return safeSend(async () => {
    const isEn = voucher.locale === "en";
    const html = await emailShell({
      heading: `Hi ${voucher.purchaserName},`,
      bodyHtml: isEn
        ? `
        <p>thanks for your gift voucher request for <strong>${formatEUR(voucher.amount)}</strong>! Rakku will get in touch with you about the payment details.</p>
        <p style="margin-top:12px;">Once payment is received, you'll get your voucher code by email.</p>
      `
        : `
        <p>danke für deine Gutschein-Anfrage über <strong>${formatEUR(voucher.amount)}</strong>! Rakku meldet sich bei dir mit den Zahlungsdetails.</p>
        <p style="margin-top:12px;">Sobald die Zahlung eingegangen ist, bekommst du deinen Gutschein-Code per E-Mail.</p>
      `,
      buttonLabel: isEn ? "Visit website" : "Zur Website",
      buttonUrl: `${process.env.SITE_URL}/${voucher.locale}`,
      footerNote: "Rakku Photography",
    });
    await sendMail(voucher.purchaserEmail, isEn ? "Your voucher request — Rakku Photography" : "Deine Gutschein-Anfrage — Rakku Photography", html);
  });
}
