import type { DrizzleClient } from '../client.js';
import { orderLineVoucherExt } from '../schema.js';
import { voucher } from '@platform-modules/commerce-fulfillment';
import { eq } from 'drizzle-orm';

export type CreateVoucherInput = typeof voucher.$inferInsert;
export type CreateVoucherExtInput = typeof orderLineVoucherExt.$inferInsert;

export async function createVoucher(db: DrizzleClient, values: CreateVoucherInput): Promise<void> {
  await db.insert(voucher).values(values);
}

export async function createVoucherExtension(
  db: DrizzleClient,
  values: CreateVoucherExtInput,
): Promise<void> {
  await db.insert(orderLineVoucherExt).values(values);
}

export async function upsertVoucherQr(
  db: DrizzleClient,
  values: typeof orderLineVoucherExt.$inferInsert,
): Promise<void> {
  await db
    .insert(orderLineVoucherExt)
    .values(values)
    .onConflictDoUpdate({
      target: orderLineVoucherExt.voucherId,
      set: { qrTokenHash: values.qrTokenHash, qrPngUrl: values.qrPngUrl },
    });
}

export async function expireVouchersForLine(
  db: DrizzleClient,
  lineId: typeof orderLineVoucherExt.$inferInsert.lineId,
  expiresAt: Date,
): Promise<void> {
  await db.update(voucher).set({ expiresAt }).where(eq(voucher.lineId, lineId));
}
