/*
|--------------------------------------------------------------------------
| Queue workers
|--------------------------------------------------------------------------
|
| Boot des workers BullMQ. V1 : on les démarre dans le même process que
| l'API HTTP (simple, suffisant tant que le volume reste petit). En prod
| K3s on les extraira dans un Deployment séparé (cf. backend.md §13.4).
|
| Tolérance Redis : si Redis n'est pas joignable au boot, on log un
| warning et l'API HTTP démarre quand même. Les jobs ne tourneront pas
| mais le reste de l'app reste utilisable (utile en dev quand docker-
| compose n'est pas up).
|
*/

import app from '@adonisjs/core/services/app'
import logger from '@adonisjs/core/services/logger'
import { registerWorker, shutdownQueue } from '#services/queue'
import { sendRelanceJob } from '#jobs/send_relance_job'
import { sendCheckinJob } from '#jobs/send_checkin_job'

if (app.getEnvironment() === 'web') {
  try {
    registerWorker<{ taskId: string }>('relances', async (job) => {
      await sendRelanceJob(job.data)
    })

    registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => {
      await sendCheckinJob(job.data)
    })

    logger.info('BullMQ workers ready (relances, checkins)')

    app.terminating(async () => {
      logger.info('shutting down BullMQ workers')
      await shutdownQueue()
    })
  } catch (err) {
    logger.warn(
      { err },
      "BullMQ workers couldn't start — Redis injoignable. L'API démarre quand même mais les jobs ne tourneront pas tant que Redis n'est pas up + serveur restart."
    )
  }
}
