import { Processor, WorkerHost } from '@nestjs/bullmq';
import { Logger } from '@nestjs/common';
import type { Job } from 'bullmq';
import { MailService } from 'src/mail/mail.service';
import type { SendVerificationEmailJob } from '../types/email-job.interface';

@Processor('email-queue')
export class EmailProcessor extends WorkerHost {
  private readonly logger = new Logger(EmailProcessor.name);

  constructor(private readonly mailService: MailService) {
    super();
  }

  async process(job: Job<SendVerificationEmailJob>): Promise<void> {
    this.logger.log(`Processing email job ${job.id} for user ${job.data.userId}`);

    try {
      await this.mailService.sendVerificationCode(job.data.email, job.data.code);
      this.logger.log(`Email sent successfully to ${job.data.email}`);
    } catch (error) {
      this.logger.error(`Failed to send email to ${job.data.email}:`, error);
      throw error; // Esto permitirá que BullMQ reintente el job
    }
  }
}
