import { Resend } from 'resend' import { state } from './state.js' import { queuePodcastChecklistWrite } from './data.js' import { DEFAULT_RESEND_FROM, DEFAULT_RESEND_TO } from './config.js' function toDateKey(date) { return date.toISOString().slice(0, 10) } export function startReminderScheduler() { checkReminders() setInterval(checkReminders, 60 * 60 * 1000) } async function checkReminders() { const episodes = state.podcastChecklist?.episodes if (!Array.isArray(episodes)) return const todayKey = toDateKey(new Date()) let changed = false for (const ep of episodes) { if (!ep.datePublished || !(ep.reminderDays > 0) || ep.reminderSentAt) continue const publish = new Date(ep.datePublished + 'T12:00:00Z') if (isNaN(publish.getTime())) continue const reminderDate = new Date(publish) reminderDate.setUTCDate(reminderDate.getUTCDate() - ep.reminderDays) const reminderKey = toDateKey(reminderDate) if (todayKey >= reminderKey && todayKey <= toDateKey(publish)) { const sent = await sendReminderEmail(ep) if (sent) { ep.reminderSentAt = new Date().toISOString() changed = true } } } if (changed) queuePodcastChecklistWrite() } async function sendReminderEmail(ep) { if (!process.env.RESEND_API_KEY) return false try { const resend = new Resend(process.env.RESEND_API_KEY) const from = process.env.RESEND_FROM ?? DEFAULT_RESEND_FROM const to = process.env.RESEND_TO ?? DEFAULT_RESEND_TO const publishDate = new Date(ep.datePublished + 'T12:00:00Z') const msLeft = publishDate.getTime() - Date.now() const daysLeft = Math.max(0, Math.ceil(msLeft / (1000 * 60 * 60 * 24))) const label = ep.episodeNumber ? `Episode ${ep.episodeNumber}` : 'Episode' const title = ep.title || 'Untitled' const series = ep.series ? ` (${ep.series})` : '' const daysText = daysLeft === 0 ? 'today' : daysLeft === 1 ? 'in 1 day' : `in ${daysLeft} days` const subject = `Reminder: "${label}: ${title}" publishes ${daysText}` const html = `
${label}: ${title}${series}
Publishes ${ep.datePublished} — ${daysText}
This reminder was set ${ep.reminderDays} day${ep.reminderDays === 1 ? '' : 's'} before the publish date. To change or remove it, open the Calendar in your admin panel.