/**
 * 测试命名辅助函数
 * 
 * 自动为测试数据添加会话ID标识，确保可以精准清理
 * 
 * @version v2.2.0
 * @created 2025-12-27
 */

import { getTestSessionId } from './cleanup.helper';

/**
 * 创建测试用户名
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的用户名
 * 
 * @example
 * ```typescript
 * const username = createTestUsername('john');
 * // 返回: john_test_1703680000000_abc123
 * ```
 */
export function createTestUsername(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}`;
}

/**
 * 创建测试邮箱
 * 
 * @param baseName - 基础名称
 * @param domain - 域名（默认: example.com）
 * @returns 包含会话ID的邮箱
 * 
 * @example
 * ```typescript
 * const email = createTestEmail('john');
 * // 返回: john_test_1703680000000_abc123@example.com
 * ```
 */
export function createTestEmail(baseName: string, domain: string = 'example.com'): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}@${domain}`;
}

/**
 * 创建测试组织代码
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的组织代码
 * 
 * @example
 * ```typescript
 * const code = createTestOrgCode('ACME');
 * // 返回: ACME_test_1703680000000_abc123
 * ```
 */
export function createTestOrgCode(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}`;
}

/**
 * 创建测试组织名称
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的组织名称
 * 
 * @example
 * ```typescript
 * const name = createTestOrgName('Acme Corp');
 * // 返回: Acme Corp (test_1703680000000_abc123)
 * ```
 */
export function createTestOrgName(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName} (${sessionId})`;
}

/**
 * 创建测试部门代码
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的部门代码
 */
export function createTestDeptCode(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}`;
}

/**
 * 创建测试部门名称
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的部门名称
 */
export function createTestDeptName(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName} (${sessionId})`;
}

/**
 * 创建测试角色代码
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的角色代码
 */
export function createTestRoleCode(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}`;
}

/**
 * 创建测试角色名称
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的角色名称
 */
export function createTestRoleName(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName} (${sessionId})`;
}

/**
 * 创建测试岗位代码
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的岗位代码
 */
export function createTestPositionCode(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}`;
}

/**
 * 创建测试岗位名称
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的岗位名称
 */
export function createTestPositionName(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName} (${sessionId})`;
}

/**
 * 创建测试区域代码
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的区域代码
 */
export function createTestRegionCode(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName}_${sessionId}`;
}

/**
 * 创建测试区域名称
 * 
 * @param baseName - 基础名称
 * @returns 包含会话ID的区域名称
 */
export function createTestRegionName(baseName: string): string {
  const sessionId = getTestSessionId();
  return `${baseName} (${sessionId})`;
}

/**
 * 通用的测试标识创建函数
 * 
 * @param type - 类型（user, org, dept, role, position, region）
 * @param baseName - 基础名称
 * @param field - 字段类型（code, name, username, email）
 * @returns 包含会话ID的标识
 * 
 * @example
 * ```typescript
 * const code = createTestIdentifier('org', 'ACME', 'code');
 * const name = createTestIdentifier('org', 'Acme Corp', 'name');
 * ```
 */
export function createTestIdentifier(
  type: 'user' | 'org' | 'dept' | 'role' | 'position' | 'region',
  baseName: string,
  field: 'code' | 'name' | 'username' | 'email'
): string {
  const sessionId = getTestSessionId();
  
  switch (field) {
    case 'username':
      return `${baseName}_${sessionId}`;
    case 'email':
      return `${baseName}_${sessionId}@example.com`;
    case 'code':
      return `${baseName}_${sessionId}`;
    case 'name':
      return `${baseName} (${sessionId})`;
    default:
      return `${baseName}_${sessionId}`;
  }
}

