import { describe, it, expect, beforeEach } from 'vitest'
import {
  registerFraudAdapters,
  resetFraudAdapterRegistrationForTest,
  getAdaptersForPoint,
  resetAdaptersForTest,
} from './index.js'
import type { DecisionPoint } from './types.js'

const EXPECTED_ADAPTER_KEYS = [
  'ip-reputation',
  'ip-cluster',
  'device-fingerprint',
  'email-canonical',
  'email-disposable',
  'email-catchall-domain',
  'payment-instrument',
  'phone-linetype',
  'phone-required-earn',
  'bot-signup',
  'velocity-conversion',
  'identity-ring',
] as const

describe('fraud adapter registry', () => {
  beforeEach(() => {
    resetAdaptersForTest()
    resetFraudAdapterRegistrationForTest()
  })

  it('registerFraudAdapters wires exactly 12 adapters', () => {
    registerFraudAdapters()
    const keys = new Set<string>()
    for (const point of ['CLICK', 'SIGNUP', 'EARN', 'WITHDRAW'] as DecisionPoint[]) {
      for (const adapter of getAdaptersForPoint(point)) {
        keys.add(adapter.key)
      }
    }
    expect(keys.size).toBe(12)
    for (const key of EXPECTED_ADAPTER_KEYS) {
      expect(keys.has(key), `missing adapter ${key}`).toBe(true)
    }
    expect(keys.has('referral-graph')).toBe(false)
  })
})
