/**
 * Organization Factory - 测试数据工厂（v2.1）
 * 
 * 用于生成测试组织数据
 * 
 * 基于文档: docs/modules/organization/09-test-scenarios.md - 测试工具和辅助函数
 * 版本: v2.1
 */

import { PrismaClient } from '@prisma/client';
import { randomString } from './user.factory';

const prisma = new PrismaClient();

/**
 * 创建测试组织（v2.0 新增）
 */
export async function createTestOrganization(overrides: any = {}) {
  const defaultData = {
    code: `ORG_${randomString()}`,
    name: `测试组织_${randomString()}`,
    shortName: `ORG-${randomString(4).toUpperCase()}`,
    legalName: `测试法人_${randomString()}`,
    status: 'ACTIVE',
  };

  return await prisma.organization.create({
    data: {
      ...defaultData,
      ...overrides,
    },
    include: {
      organizationRegions: {
        include: {
          region: true,
        },
      },
      departments: true,
    },
  });
}

/**
 * 批量创建测试组织
 */
export async function createManyOrganizations(count: number) {
  const orgs = [];
  for (let i = 0; i < count; i++) {
    const org = await createTestOrganization({
      code: `ORG_${i}`,
      name: `组织${i}`,
      shortName: `O${i}`,
      legalName: `法人${i}`,
    });
    orgs.push(org);
  }
  return orgs;
}

/**
 * 为组织添加区域
 */
export async function addRegionToOrganization(
  organizationId: string,
  regionId: string,
  isDefault: boolean = false,
) {
  return await prisma.organizationRegion.create({
    data: {
      organizationId,
      regionId,
      isDefault, // 修改为 isDefault，根据实际 schema 定义
    },
  });
}

/**
 * 创建测试区域
 */
export async function createTestRegion(overrides: any = {}) {
  const defaultData = {
    code: `R${randomString(2).toUpperCase()}`,
    name: `测试区域_${randomString()}`,
    nameEn: `Region ${randomString()}`,
    nameZh: `区域${randomString()}`,
    isActive: true,
  };

  return await prisma.region.create({
    data: {
      ...defaultData,
      ...overrides,
    },
  });
}

/**
 * 清理测试组织
 */
export async function cleanupTestOrganizations() {
  await prisma.organizationRegion.deleteMany({});
  await prisma.organization.deleteMany({});
}

/**
 * 清理测试区域
 */
export async function cleanupTestRegions() {
  await prisma.organizationRegion.deleteMany({});
  await prisma.region.deleteMany({});
}

