import type { FraudAdapter, SignupCtx, FraudSignal, AdapterConfig } from '../types.js';
import { canonicalizeEmail } from '../email-canonical-fn.js';
import { eq } from 'drizzle-orm';
import { users } from '@/server/db/schema.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 existing = await ctx.db
      .select({ id: users.id })
      .from(users)
      .where(eq(users.emailCanonicalIndex, canonical))
      .limit(1);

    if (!existing.length || existing[0]!.id === ctx.refereeUserId) return null;

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