/**
 * 一次性 sanity check：用 探针采到的真实 FF 命名分布 + 自定义边界用例
 * 验证 outlook-attendee-auto-add-filter 的规则行为。
 *
 * 跑法：
 *   cd backend
 *   TS_NODE_COMPILER_OPTIONS='{"module":"commonjs","moduleResolution":"node","resolvePackageJsonExports":false}' \
 *     npx ts-node --transpile-only scripts/probes/auto-add-filter-sanity.ts
 *
 * 不替代 spec 文件（jest infra 修好后启用 spec 跑 CI）；当前跑这个看规则是否符合预期。
 */
import { evaluateGraphUserForAutoAdd, GraphUserForFilter } from '../../src/modules/meeting-attendance/services/outlook-attendee-auto-add-filter';

interface Case {
  name: string;
  user: GraphUserForFilter;
  email: string;
  expectDecision: string;
  expectMatchedRule?: string;
}

const cases: Case[] = [
  // 真人通过
  {
    name: '真人 firstname.lastname',
    user: { accountEnabled: true, userType: 'Member', mail: 'alice.smith@ff.com', mailNickname: 'alice.smith', displayName: 'Alice Smith' },
    email: 'alice.smith@ff.com',
    expectDecision: 'eligible',
  },
  {
    name: '中国员工 cn-bin.qiao',
    user: { accountEnabled: true, userType: 'Member', mail: 'bin.qiao@ff.com', mailNickname: 'cn-bin.qiao', displayName: 'Bin Qiao (Consultant)' },
    email: 'bin.qiao@ff.com',
    expectDecision: 'eligible',
  },
  {
    name: '乐观放行 Andy.admin（含 admin 但是真人）',
    user: { accountEnabled: true, userType: 'Member', mail: 'andy.admin@ff.com', mailNickname: 'Andy.admin', displayName: 'Andy admin' },
    email: 'andy.admin@ff.com',
    expectDecision: 'eligible',
  },
  {
    name: '乐观放行 Robert Holshouser (Contractor)',
    user: { accountEnabled: true, userType: 'Member', mail: 'robert.holshouser@ff.com', mailNickname: 'Robert.Holshouser', displayName: 'Robert Holshouser (Contractor)' },
    email: 'robert.holshouser@ff.com',
    expectDecision: 'eligible',
  },

  // 硬过滤
  {
    name: '硬过滤 disabled',
    user: { accountEnabled: false, userType: 'Member', mail: 'old@ff.com', mailNickname: 'old.user', displayName: 'Old User' },
    email: 'old@ff.com',
    expectDecision: 'skipped_disabled',
  },
  {
    name: '硬过滤 Guest',
    user: { accountEnabled: true, userType: 'Guest', mail: 'ext@partner.com', mailNickname: 'ext_partner', displayName: 'Ext Partner' },
    email: 'ext@partner.com',
    expectDecision: 'skipped_guest',
  },
  {
    name: '硬过滤 mail null',
    user: { accountEnabled: true, userType: 'Member', mail: null, mailNickname: 'sysacct', displayName: 'System Account' },
    email: 'sysacct@ff.com',
    expectDecision: 'skipped_no_mail',
  },
  {
    name: '硬过滤 mail mismatch',
    user: { accountEnabled: true, userType: 'Member', mail: 'someone@ff.com', mailNickname: 'someone', displayName: 'Some One' },
    email: 'alice@ff.com',
    expectDecision: 'skipped_email_mismatch',
  },
  {
    name: 'mail 大小写不一致仍匹配',
    user: { accountEnabled: true, userType: 'Member', mail: 'Alice.Smith@FF.com', mailNickname: 'alice.smith', displayName: 'Alice Smith' },
    email: 'ALICE.SMITH@ff.COM',
    expectDecision: 'eligible',
  },

  // mailNickname 前缀
  {
    name: '会议室 Conf_Floor2',
    user: { accountEnabled: true, userType: 'Member', mail: 'conf.floor2@ff.com', mailNickname: 'Conf_Floor2_Treehouse', displayName: '!Conf_Floor2_Treehouse' },
    email: 'conf.floor2@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'mailNickname_prefix:conf_',
  },
  {
    name: '! 前缀资源',
    user: { accountEnabled: true, userType: 'Member', mail: 'equip.test1@ff.com', mailNickname: '!Equip_Test1', displayName: '!Equip_Test1' },
    email: 'equip.test1@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'mailNickname_prefix:!',
  },
  {
    name: '服务账号 svc-rapid7',
    user: { accountEnabled: true, userType: 'Member', mail: 'svc.rapid7@ff.com', mailNickname: 'svc-rapid7', displayName: 'Rapid 7 Service Account' },
    email: 'svc.rapid7@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'mailNickname_prefix:svc-',
  },
  {
    name: 'mailNickname 含 _svc（如 my_svc.account）',
    user: { accountEnabled: true, userType: 'Member', mail: 'my.svc.account@ff.com', mailNickname: 'my_svc.account', displayName: 'My Svc Account' },
    email: 'my.svc.account@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'mailNickname_contains:_svc',
  },
  {
    name: 'ffcn_networksvc 实际不含 _svc 子串（n+etworksvc），但 displayName 含 service account 类不命中 → 由 mail null 硬过滤拒绝（探针实测无 mail）',
    user: { accountEnabled: true, userType: 'Member', mail: null, mailNickname: 'ffcn_networksvc', displayName: 'ffcn_networksvc' },
    email: 'x@ff.com',
    expectDecision: 'skipped_no_mail',
  },

  // displayName 关键词
  {
    name: 'displayName Service Account（mailNickname 是真人 form）',
    user: { accountEnabled: true, userType: 'Member', mail: 'backup.account@ff.com', mailNickname: 'backupnotifications', displayName: 'Backup Account (ServiceAccount)' },
    email: 'backup.account@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'displayName:serviceaccount',
  },
  {
    name: 'displayName Conference Room',
    user: { accountEnabled: true, userType: 'Member', mail: 'ffme.cr@ff.com', mailNickname: 'ffme.cr', displayName: 'FFME Conf Room' },
    email: 'ffme.cr@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'displayName:conf room',
  },
  {
    name: 'displayName 中文 会议室',
    user: { accountEnabled: true, userType: 'Member', mail: 'sh.conf@ff.com', mailNickname: 'sh.conf', displayName: '上海会议室 A' },
    email: 'sh.conf@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'displayName:会议室',
  },
  {
    name: 'displayName z_archive_',
    user: { accountEnabled: true, userType: 'Member', mail: 'meetingsupport@ff.com', mailNickname: 'meetingsupport', displayName: 'z_archive_Meeting Support' },
    email: 'meetingsupport@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'displayName:z_archive_',
  },
  {
    name: 'displayName SystemMailbox{...}（M365 系统邮箱模板）',
    user: { accountEnabled: true, userType: 'Member', mail: 'sysbox@ff.com', mailNickname: 'sysbox', displayName: 'SystemMailbox{1f05a927-c4f3-...}' },
    email: 'sysbox@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'displayName:systemmailbox{',
  },
  {
    name: 'displayName DiscoverySearchMailbox{...}',
    user: { accountEnabled: true, userType: 'Member', mail: 'dsbox@ff.com', mailNickname: 'dsbox', displayName: 'DiscoverySearchMailbox{D919BA05-46A6-...}' },
    email: 'dsbox@ff.com',
    expectDecision: 'skipped_resource_naming',
    expectMatchedRule: 'displayName:discoverysearchmailbox{',
  },
];

let passed = 0;
let failed = 0;
for (const c of cases) {
  const result = evaluateGraphUserForAutoAdd(c.user, c.email);
  const okDecision = result.decision === c.expectDecision;
  const okRule = !c.expectMatchedRule || result.matchedRule === c.expectMatchedRule;
  if (okDecision && okRule) {
    console.log(`  ✅ ${c.name}`);
    passed++;
  } else {
    console.log(`  ❌ ${c.name}`);
    console.log(`     期望: decision=${c.expectDecision}${c.expectMatchedRule ? ` rule=${c.expectMatchedRule}` : ''}`);
    console.log(`     实际: decision=${result.decision}${result.matchedRule ? ` rule=${result.matchedRule}` : ''}`);
    failed++;
  }
}

console.log(`\n${passed}/${cases.length} 通过；${failed} 失败`);
process.exit(failed === 0 ? 0 : 1);
