import { Processor, WorkerHost } from '@nestjs/bullmq';
import { Injectable, Logger } from '@nestjs/common';
import { Job } from 'bullmq';
import { S3Service } from '../aws/s3.service';
import { PrismaService } from '../prisma/prisma.service';
import { S3_CLEANUP_QUEUE } from './queue.constants';

@Injectable()
@Processor(S3_CLEANUP_QUEUE)
export class S3CleanupProcessor extends WorkerHost {
  private readonly logger = new Logger(S3CleanupProcessor.name);

  constructor(
    private readonly s3: S3Service,
    private readonly prisma: PrismaService,
  ) {
    super();
  }

  async process(job: Job<{ key: string }>) {
    const log = await this.prisma.backgroundJobLog.create({
      data: { queueName: S3_CLEANUP_QUEUE, jobName: job.name, payload: job.data },
    });
    try {
      await this.s3.deleteObject(job.data.key);
      await this.prisma.backgroundJobLog.update({ where: { id: log.id }, data: { status: 'COMPLETED' } });
    } catch (error) {
      const message = error instanceof Error ? error.message : 'Unknown S3 delete error';
      this.logger.error(message);
      await this.prisma.backgroundJobLog.update({ where: { id: log.id }, data: { status: 'FAILED', error: message } });
      throw error;
    }
  }
}
