import { connectDB } from "@/lib/db";
import { GiftVoucher } from "@/models/GiftVoucher";
import { getSettings } from "@/lib/settings";
import { sendMail } from "@/lib/mail";
import { emailShell } from "@/lib/emailTemplate";
import { formatEUR, formatDateDE } from "@/lib/orderConstants";

const WARN_DAYS_AHEAD = 30;

// Täglicher Cron-Lauf (siehe api/cron/voucher-expiry) — findet ausgestellte,
// noch nicht eingelöste Gutscheine, die in den nächsten 30 Tagen verjähren,
// und schickt Rakku (nicht dem Kunden) eine einmalige Sammel-Erinnerung pro
// Gutschein, damit keiner unbemerkt verfällt.
export async function runVoucherExpirySweep() {
  await connectDB();
  const settings = await getSettings();
  const adminEmail = settings.invoiceSettings?.email || settings.socialLinks?.email;
  if (!adminEmail) return { sent: 0, skipped: "no-admin-email" as const };

  const now = new Date();
  const soon = new Date(now.getTime() + WARN_DAYS_AHEAD * 24 * 60 * 60 * 1000);

  const expiring = await GiftVoucher.find({
    paid: true,
    cancelled: false,
    redeemed: false,
    expiryReminderSent: false,
    expiresAt: { $ne: null, $gte: now, $lte: soon },
  }).lean();

  if (expiring.length === 0) return { sent: 0 };

  const rows = expiring
    .map(
      (v) =>
        `<tr><td style="padding:4px 12px 4px 0;">${v.code || "(kein Code)"}</td><td style="padding:4px 12px;">${v.purchaserName}</td><td style="padding:4px 12px;">${formatEUR(v.amount)}</td><td style="padding:4px 0;">${formatDateDE(new Date(v.expiresAt as Date))}</td></tr>`
    )
    .join("");

  const html = await emailShell({
    heading: "Gutscheine laufen bald ab",
    bodyHtml: `
      <p style="margin:0 0 12px;">${expiring.length} ausgestellte(r), noch nicht eingelöste(r) Gutschein(e) verjährt/verjähren in den nächsten ${WARN_DAYS_AHEAD} Tagen:</p>
      <table style="border-collapse:collapse;font-size:14px;"><thead><tr><th style="text-align:left;padding:4px 12px 4px 0;">Code</th><th style="text-align:left;padding:4px 12px;">Käufer:in</th><th style="text-align:left;padding:4px 12px;">Betrag</th><th style="text-align:left;padding:4px 0;">Verfällt am</th></tr></thead><tbody>${rows}</tbody></table>
    `,
    buttonLabel: "Gutscheine verwalten",
    buttonUrl: `${process.env.SITE_URL}/de/admin/vouchers`,
    footerNote: "Automatische Benachrichtigung von rakku.de — einmalig pro Gutschein.",
  });

  try {
    await sendMail(adminEmail, `${expiring.length} Gutschein(e) laufen bald ab — Rakku Photography`, html);
    await GiftVoucher.updateMany({ _id: { $in: expiring.map((v) => v._id) } }, { $set: { expiryReminderSent: true } });
    return { sent: expiring.length };
  } catch (err) {
    console.error("Gutschein-Ablauf-Erinnerung fehlgeschlagen:", err);
    return { sent: 0, error: true };
  }
}
