import { Worker, type Job } from 'bullmq';
import { env } from '@/lib/env';

import type { ConnectionOptions } from 'bullmq';
import { logger } from '@/lib/logger';
import { attachWorkerAudit } from '@/lib/queue/audit-helpers';
import { QUEUE_CONFIGS } from '@/lib/queue';

/**
 * Bulk-import worker — DEFERRED FEATURE (placeholder).
 *
 * Status: registered with BullMQ so any future enqueue site lands on a
 * real worker instance instead of disappearing into an unbound queue.
 * No callers currently dispatch to this worker — the body is intentionally
 * a no-op that logs the dispatch for forensics.
 *
 * Why deferred (vs implemented inline):
 *   - CSV/Excel import is a real product feature, not a refactor. Done
 *     properly it needs: per-entity schema mapping (clients / berths /
 *     interests / companies / yachts), zod-level row validation, per-row
 *     error rollup with line-numbered diagnostics, dry-run preview,
 *     progress reporting, dedupe-on-conflict policy, admin upload UI
 *     with column-mapping UX. Building it speculatively without a
 *     customer in the room would lock in a UX that may not match what
 *     real importers want.
 *   - When the trigger comes (a customer needs to bulk-load a season
 *     roster or migrate from another CRM), build it from product spec
 *     not from this placeholder.
 *
 * What's required to ship: papaparse (CSV) + a thin schema-per-entity
 * mapping layer, plus an admin /admin/import page with a per-entity
 * picker + file dropzone. The queue registration here stays as-is.
 */
export const importWorker = new Worker(
  'import',
  async (job: Job) => {
    logger.info({ jobId: job.id, jobName: job.name }, 'Processing import job');
    // Deferred — no callers enqueue this. If a job lands, we log + swallow
    // so a future test enqueue doesn't trip the failed-job alert.
  },
  {
    connection: { url: env.REDIS_URL } as ConnectionOptions,
    concurrency: QUEUE_CONFIGS.import.concurrency,
  },
);

importWorker.on('failed', (job, err) => {
  logger.error({ jobId: job?.id, jobName: job?.name, err }, 'Import job failed');
});

attachWorkerAudit(importWorker, 'import');
