import { createDbService } from '@/server/services/db.js';
import { z } from 'zod';
import { sendToUser } from '../../../push/send.js';
import type { PushEnv } from '../../../push/send.js';
import { formatAgorotWhole } from '@/lib/money.js';
import type { OutboxHandler } from '../types.js';

const payloadSchema = z.looseObject({
  referrerUserId: z.uuid(),
  refereeUserId: z.uuid().optional(),
  rewardAgorot: z.number().int(),
  purchaseId: z.uuid(),
});

type Payload = z.infer<typeof payloadSchema>;

export const referralQualified: OutboxHandler<Payload> = {
  type: 'referral.qualified',
  payloadSchema,
  async handle(ctx, payload) {
    const db = createDbService({ DATABASE_URL: ctx.DATABASE_URL });
    const pushBody = `חבר/ה שהזמנת ביצעו רכישה ראשונה — קרדיט של ${formatAgorotWhole(payload.rewardAgorot)} נוסף לחשבונך`;

    await sendToUser(db, ctx as PushEnv, payload.referrerUserId, {
      title: 'מולטידיל — קרדיט הפניה',
      body: pushBody,
      url: '/referrals',
      tag: `referral-qualified-${payload.purchaseId}`,
    });
  },
};
