import type { FraudAdapter, SignupCtx, FraudSignal, AdapterConfig } from '../types.js'
import { canonicalizeEmail } from '../email-canonical-fn.js'

export const emailCanonicalAdapter: FraudAdapter<SignupCtx> = {
  key: 'email-canonical',
  points: ['SIGNUP'],
  async evaluate(ctx: SignupCtx, _cfg: AdapterConfig): Promise<FraudSignal | null> {
    if (!ctx.refereeEmail) return null
    const canonical = canonicalizeEmail(ctx.refereeEmail)
    if (!canonical) return null

    const existingUserId = await ctx.host.findExistingUserIdByEmailCanonical(canonical)
    if (!existingUserId || existingUserId === ctx.refereeUserId) return null

    return {
      adapter: 'email-canonical',
      action: 'block',
      codes: ['CANONICAL_EMAIL_EXISTS'],
      detail: {},
    }
  },
}
