/**
 * Translation Queue (Bull/Redis)
 *
 * Centralized Bull queue instance for translation jobs.
 * Shared between API routes and worker process.
 */

import Queue from 'bull';
import { logger } from '../utils/logger';
import { buildRedisUrl } from '../config';

function getRedisUrl(): string {
  return buildRedisUrl(
    process.env.REDIS_HOST || 'localhost',
    Number(process.env.REDIS_PORT || 6379),
    Number(process.env.REDIS_DB || 0),
    process.env.REDIS_PASSWORD
  );
}

/**
 * Translation job queue
 */
export const translationQueue = new Queue('translation-jobs', getRedisUrl(), {
  defaultJobOptions: {
    attempts: 3,
    backoff: {
      type: 'exponential',
      delay: 2000,
    },
    removeOnComplete: 100, // Keep last 100 completed jobs
    removeOnFail: 500, // Keep last 500 failed jobs
  },
});

/**
 * Log queue events
 */
translationQueue.on('error', (error) => {
  logger.error('Translation queue error', { error });
});

translationQueue.on('waiting', (jobId) => {
  logger.debug('Job waiting in queue', { jobId });
});

translationQueue.on('active', (job) => {
  logger.info('Job started processing', { jobId: job.id });
});

translationQueue.on('completed', (job) => {
  logger.info('Job completed', { jobId: job.id });
});

translationQueue.on('failed', (job, error) => {
  logger.error('Job failed', { jobId: job?.id, error: error.message });
});

logger.info('Translation queue initialized', {
  redis: getRedisUrl().replace(/:[^:@]+@/, ':***@'), // Hide password in logs
});
