import { NotificationJobType } from '@/jobs/notifications/notification.job.js';
import { FetchNotifyEmail } from '@/jobs/services/expirePlanNotify.job';
import { sendTransactionalEmail } from '@/shared/email/email.service';

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

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

/**
 * A simple function to handle notifications without BullMQ worker.
 * Call this function directly wherever you need to process notifications.
 */
export async function processNotificationJob(
  name: NotificationJobType,
  data: EmailData[] | SmsData,
) {
  switch (name) {
    case NotificationJobType.SEND_EMAIL: {
      const emailData = data as EmailData[];
      for (const email of emailData) {
        console.log('Sending email to:', email);
        // eslint-disable-next-line no-await-in-loop
        await sendTransactionalEmail({
          to: email.to,
          subject: email.subject,
          htmlContent: email.body,
        });
      }
      break;
    }

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

    case NotificationJobType.PLAN_STATUS_EMAIL: {
      // Call your function to fetch users and send emails
      await FetchNotifyEmail();
      break;
    }

    default:
      console.warn('Unknown notification job type:', name);
  }
}
