import { validateProEmail } from "../lib/email-validation";

type Case = { email: string; expectValid: boolean; reason?: string };

const cases: Case[] = [
  { email: "test@gmail.com", expectValid: false, reason: "consumer" },
  { email: "test@yahoo.fr", expectValid: false, reason: "consumer" },
  { email: "test@icloud.com", expectValid: false, reason: "consumer" },
  { email: "test@outlook.fr", expectValid: false, reason: "consumer" },
  { email: "test@orange.fr", expectValid: false, reason: "consumer" },
  { email: "test@mailinator.com", expectValid: false, reason: "disposable" },
  { email: "test@yopmail.fr", expectValid: false, reason: "disposable" },
  { email: "bad-format", expectValid: false, reason: "format" },
  { email: "@nope.com", expectValid: false, reason: "format" },
  { email: "test@nodomain", expectValid: false, reason: "format" },
  {
    email: "test@this-domain-definitely-does-not-exist-zzzz.invalid",
    expectValid: false,
    reason: "no-mx",
  },
  { email: "bastien@elevaseo.com", expectValid: true },
  { email: "anyone@anthropic.com", expectValid: true },
];

async function main() {
  let passed = 0;
  let failed = 0;

  for (const c of cases) {
    const r = await validateProEmail(c.email);
    const validMatches = r.valid === c.expectValid;
    const reasonMatches =
      !c.reason || (!r.valid && r.reason === c.reason) || (r.valid && !c.reason);
    const ok = validMatches && reasonMatches;
    if (ok) {
      passed++;
      console.log(`OK    ${c.email.padEnd(60)} → ${r.valid ? "valid" : `invalid (${r.reason})`}`);
    } else {
      failed++;
      console.error(
        `FAIL  ${c.email.padEnd(60)} → got ${r.valid ? "valid" : `invalid (${r.reason})`}, expected ${c.expectValid ? "valid" : `invalid (${c.reason})`}`,
      );
    }
  }

  console.log(`\n${passed} passed, ${failed} failed`);
  process.exit(failed === 0 ? 0 : 1);
}

main().catch((e) => {
  console.error(e);
  process.exit(1);
});
