import { PrismaClient } from '@prisma/client';
import { seedAgendaModule } from './agenda.seed';
import { seedAuditModule } from './audit.seed';
import { seedBootstrap } from './bootstrap';
import { seedCanvasModule } from './canvas.seed';
import { seedDataMngtPages } from './data-mngt.seed';
import { seedGameModule } from './game.seed';
import { seedPermissionModule } from './permission.seed';
import users from './users';
import { seedWorkflowModule } from './workflow.seed';

const prisma = new PrismaClient();

/**
 * Top-level seed orchestrator.
 *
 * 顺序：
 *   ① bootstrap          —— admin/dataMngt 根 page + SYSTEM_ADMIN role（全模块前置）
 *   ② 各模块 seed         —— 每个模块自管自家 page / resource / 授权 / 业务数据
 *   ③ data-mngt 自动 CRUD —— 扫描 config/prisma/ 业务模型生成 page/resource/grants
 *
 * 每个模块 seed 函数自检前置（findUniqueOrThrow），缺失即快速失败。
 * 全部幂等，可重复运行。
 */
export async function main() {
  await prisma.user.createMany({ data: users, skipDuplicates: true });

  await seedBootstrap(prisma);

  await seedPermissionModule(prisma);
  await seedAgendaModule(prisma);
  await seedAuditModule(prisma);
  await seedCanvasModule(prisma);
  await seedGameModule(prisma);
  await seedWorkflowModule(prisma);

  await seedDataMngtPages(prisma);
}

if (require.main === module) {
  main()
    .catch((e) => {
      console.log(e);
      process.exit(1);
    })
    .finally(async () => {
      await prisma.$disconnect();
    });
}
