import { NotificationJobType } from '@/jobs/notifications/notification.job.js';
// import { sendEmailNotification } from '@/producers/notification/notification.producer';
import { createWorker } from '@/shared/config/bullmq.config.js';
import { sendTransactionalEmail } from '@/shared/email/email.service';
// import { EmailType } from '@/shared/constants/enum.constant';

interface EmailData {
  to: string;
  subject: string;
  body: string;
}

interface SmsData {
  phone: string;
  message: string;
}

createWorker(
  'notification',
  async (job) => {
    const { name, data } = job;
    switch (name) {
      case NotificationJobType.SEND_EMAIL: {
        const emailData = data as EmailData[];
        for (const email of emailData)
          console.log('Sending email to:', email.to);
        sendTransactionalEmail({
          to: emailData[0].to,
          subject: emailData[0].subject,
          htmlContent: emailData[0].body,
        });
        break;
      }

      case NotificationJobType.SEND_SMS: {
        const smsData = data as SmsData;
        console.log('Sending SMS to:', smsData.phone);
        break;
      }

      case NotificationJobType.PLAN_STATUS_EMAIL: {
        //Fetch Email List
        // const emailList = ['nirav@codnestx.com'];
        // changed it to Implement pagination with 500 each
        // FetchNotifyEmail();
        // const chunkSize = 500;
        // for (let i = 0; i < emailList.length; i += chunkSize) {
        //   const chunk = emailList.slice(i, i + chunkSize);
        //   sendEmailNotification({
        //     to: chunk[0],
        //     subject: 'Plan Status',
        //     body: 'Plan Status',
        //     type: EmailType[0],
        //   }).catch((error) => console.error(error)); // Send email to each chunk);
        // }
        break;
      }
      default:
        return;
    }
  },
  {
    concurrency: 1,
    // Limit to 100 outbound messages per minute.
    limiter: {
      max: 100, // maximum number of jobs that can be processed concurrently
      duration: 60000, // maximum number of milliseconds that can be spent processing jobs
    },
  },
);
