/**
 * Compliance Worker
 * Sends a daily compliance report email at 7:00 AM UTC
 *
 * Run with: npx tsx src/workers/compliance.worker.ts
 */

import { ComplianceService } from '../lib/compliance';

const REPORT_HOUR_UTC = 7; // 7:00 AM UTC
const CHECK_INTERVAL_MS = 60 * 1000; // Check every minute

let lastReportDate = '';

async function checkAndSendReport(): Promise<void> {
  const now = new Date();
  const today = now.toISOString().split('T')[0];
  const currentHour = now.getUTCHours();
  const currentMinute = now.getUTCMinutes();

  // Send report at 7:00 AM UTC, once per day
  if (currentHour === REPORT_HOUR_UTC && currentMinute < 1 && lastReportDate !== today) {
    console.log(`[ComplianceWorker] Sending daily report for yesterday...`);

    // Report on yesterday's activity
    const yesterday = new Date(now);
    yesterday.setDate(yesterday.getDate() - 1);

    const success = await ComplianceService.sendDailyReport(yesterday);

    if (success) {
      lastReportDate = today;
      console.log(`[ComplianceWorker] Report sent successfully`);
    } else {
      console.error(`[ComplianceWorker] Failed to send report`);
    }
  }
}

// Start the check interval
const interval = setInterval(checkAndSendReport, CHECK_INTERVAL_MS);

// Run initial check
checkAndSendReport();

// Graceful shutdown
process.on('SIGTERM', () => {
  console.log('[ComplianceWorker] Shutting down...');
  clearInterval(interval);
  process.exit(0);
});

process.on('SIGINT', () => {
  console.log('[ComplianceWorker] Shutting down...');
  clearInterval(interval);
  process.exit(0);
});

console.log(`[ComplianceWorker] Started. Will send daily report at ${REPORT_HOUR_UTC}:00 UTC`);
