import { query } from '../db';
import { logger } from '../logger';
import { sendCampaign } from './campaignSender';

/** Fire scheduled campaigns when due (1 min tick). */
export function startSchedulePoller(): ReturnType<typeof setInterval> {
  return setInterval(() => {
    void (async () => {
      try {
        const due = await query<{ id: string }>(
          `SELECT id FROM campaigns
           WHERE status = 'scheduled' AND scheduled_at IS NOT NULL AND scheduled_at <= now()
           ORDER BY scheduled_at ASC LIMIT 5`
        );
        for (const d of due) {
          sendCampaign(d.id).catch(e =>
            logger.error({ err: e, campaignId: d.id }, 'scheduled campaign send failed')
          );
        }
      } catch (e) {
        logger.error(e, 'schedule poller error');
      }
    })();
  }, 60_000);
}
