/**
 * Register all fraud adapters into the global registry.
 * Call once at application startup — idempotent if called multiple times.
 */
import { registerAdapter } from './registry.js'
import { emailCanonicalAdapter } from './adapters/email-canonical.js'
import { emailDisposableAdapter } from './adapters/email-disposable.js'
import { phoneLinetypeAdapter } from './adapters/phone-linetype.js'
import { phoneRequiredEarnAdapter } from './adapters/phone-required-earn.js'
import { identityRingAdapter } from './adapters/identity-ring.js'
import { emailCatchallDomainAdapter } from './adapters/email-catchall-domain.js'
import { botSignupAdapter } from './adapters/bot-signup.js'
import { deviceFingerprintAdapter } from './adapters/device-fingerprint.js'
import { ipClusterAdapter } from './adapters/ip-cluster.js'
import { ipReputationAdapter } from './adapters/ip-reputation.js'
import { paymentInstrumentAdapter } from './adapters/payment-instrument.js'
import { velocityConversionAdapter } from './adapters/velocity-conversion.js'
// referralGraphAdapter is intentionally NOT registered here — ring detection is
// performed offline by the nightly runReferralGraphScan cron (graph-scan.ts).
// Hot-path inline traversal is deferred (ticket: referral-graph-inline-detect).

let registered = false

export function registerFraudAdapters(): void {
  if (registered) return
  registered = true
  registerAdapter(emailCanonicalAdapter)
  registerAdapter(emailDisposableAdapter)
  registerAdapter(phoneLinetypeAdapter)
  registerAdapter(phoneRequiredEarnAdapter)
  registerAdapter(identityRingAdapter)
  registerAdapter(emailCatchallDomainAdapter)
  registerAdapter(botSignupAdapter)
  registerAdapter(deviceFingerprintAdapter)
  registerAdapter(ipClusterAdapter)
  registerAdapter(ipReputationAdapter)
  registerAdapter(paymentInstrumentAdapter)
  registerAdapter(velocityConversionAdapter)
}

/** Test-only: allow re-registration in isolated test files. */
export function resetFraudAdapterRegistrationForTest(): void {
  registered = false
}
