import { existsSync, readFileSync } from 'node:fs';
import { join } from 'node:path';

/**
 * Mock 客服花名册 loader —— 读 `data/<host>/users.json`(派生自回访表,近 12 月在岗)。
 *
 * 这是"文件先行"的临时方案(见 docs 讨论):mock-login 选人用,**非 PAC 主数据**。
 * 文件结构 = 未来 `users` + `user_clinics` 两表的形状,以后升表直接灌、不返工。
 *
 * 路径策略(跟 skill-registry 同理由 — 用 cwd 不用 __dirname,dev/prod 都稳):
 *   - env PAC_MOCK_USERS_FILE 覆盖(测试/换 host)
 *   - 默认 `<cwd>/data/jvs-dw/users.json`(data/ 不编译,dev/prod 同路径)
 *   - 文件不存在 → 返回 [](picker 不显示,不报错)
 *
 * 内存缓存:启动后读一次;文件由离线 CLI 刷新,运行时不变(改了重启 pac-service)。
 */
export interface RawMockUser {
  externalId: string;
  name: string;
  tenant: 'ruier' | 'ruitai';
  roles: string[];
  lastActiveAt: string;
  clinics: Array<{ clinicId: string; lastActiveAt: string; contactCount: number }>;
}

export function resolveMockUsersFile(): string {
  return process.env.PAC_MOCK_USERS_FILE || join(process.cwd(), 'data/jvs-dw/users.json');
}

let cache: RawMockUser[] | null = null;

export function loadMockUsers(): RawMockUser[] {
  if (cache) return cache;
  const path = resolveMockUsersFile();
  if (!existsSync(path)) {
    cache = [];
    return cache;
  }
  try {
    const parsed = JSON.parse(readFileSync(path, 'utf-8')) as RawMockUser[];
    cache = Array.isArray(parsed) ? parsed : [];
  } catch {
    cache = [];
  }
  return cache;
}
