import { z } from 'zod';
import { getDb } from '@/server/db/client.js';
import { enqueueLlmJob } from '@/server/ai/llm.js';
import { llmJobs } from '@/server/db/schema.js';
import { eq } from 'drizzle-orm';
import type { OutboxHandler } from '../types.js';

const payloadSchema = z.object({
  dealId: z.uuid(),
  vendorId: z.uuid(),
});

type Payload = z.infer<typeof payloadSchema>;

export const dealLlmValidate: OutboxHandler<Payload> = {
  type: 'deal.llm-validate',
  payloadSchema,
  async handle(ctx, payload, event) {
    const db = getDb({ DATABASE_URL: ctx.DATABASE_URL });
    const [existing] = await db
      .select({ id: llmJobs.id })
      .from(llmJobs)
      .where(eq(llmJobs.id, event.id))
      .limit(1);
    const jobId =
      existing?.id ??
      (await enqueueLlmJob(db, {
        id: event.id,
        jobType: 'DEAL_MODERATION',
        targetId: payload.dealId,
        targetType: 'DEAL',
        inputPayload: { dealId: payload.dealId, vendorId: payload.vendorId },
      }));
    if (ctx.LLM_JOBS_QUEUE) await ctx.LLM_JOBS_QUEUE.send({ jobId });
  },
};
