import { Processor, WorkerHost } from '@nestjs/bullmq';
import { Injectable, Logger } from '@nestjs/common';
import { Job } from 'bullmq';
import { GpsService } from '../../gps/gps.service';
import { AnalyticsService } from '../../analytics/analytics.service';
import { QUEUE_NAMES } from '../../common/constants/events';

@Injectable()
@Processor(QUEUE_NAMES.GPS)
export class GpsProcessor extends WorkerHost {
  private readonly logger = new Logger(GpsProcessor.name);

  constructor(private readonly gps: GpsService) {
    super();
  }

  async process(job: Job<{ tripId: string }>) {
    this.logger.debug(`Processing GPS metrics for trip ${job.data.tripId}`);
    await this.gps.recalculateTripMetrics(job.data.tripId);
  }
}

@Injectable()
@Processor(QUEUE_NAMES.ANALYTICS)
export class AnalyticsProcessor extends WorkerHost {
  private readonly logger = new Logger(AnalyticsProcessor.name);

  constructor(private readonly analytics: AnalyticsService) {
    super();
  }

  async process(job: Job<{ userId: string; date: string }>) {
    this.logger.debug(`Recalculating analytics for user ${job.data.userId}`);
    await this.analytics.recalculateDaily(
      job.data.userId,
      new Date(job.data.date),
    );
  }
}
