import type { Querier } from '@platform-modules/db'
import { fraudEventsTable } from '../schema.js'
import type { DecisionPoint, FraudDb, FraudSignal } from './types.js'
import { toStoredDecisionPoint } from './types.js'

export interface InsertFraudEventInput {
  userId: string
  referralId?: string
  decisionPoint: DecisionPoint
  signal: FraudSignal
}

export async function insertFraudEvent(
  db: FraudDb,
  input: InsertFraudEventInput,
): Promise<string | null> {
  const [row] = await db
    .insert(fraudEventsTable)
    .values({
      userId: input.userId,
      referralId: input.referralId ?? null,
      decisionPoint: toStoredDecisionPoint(input.decisionPoint),
      adapter: input.signal.adapter,
      action: input.signal.action,
      codes: input.signal.codes,
      detail: input.signal.detail ?? null,
    })
    .onConflictDoNothing()
    .returning({ id: fraudEventsTable.id })
  return row?.id ?? null
}
