import {
  IsString,
  IsNotEmpty,
  IsOptional,
  IsEnum,
  IsUUID,
  IsArray,
  MaxLength,
  IsBoolean,
} from 'class-validator';
import { Transform } from 'class-transformer';

// ==================== 分配策略枚举 ====================

export enum AssignmentStrategy {
  ROUND_ROBIN = 'ROUND_ROBIN',
  LOAD_BALANCE = 'LOAD_BALANCE',
  MANUAL = 'MANUAL',
  SKILL_BASED = 'SKILL_BASED',
}

// ==================== 创建处理组 DTO ====================

export class CreateGroupDto {
  @IsString()
  @IsNotEmpty()
  @MaxLength(100)
  name: string;

  @IsString()
  @IsNotEmpty()
  @MaxLength(50)
  code: string;

  @IsString()
  @IsOptional()
  description?: string;

  @IsArray()
  @IsUUID('4', { each: true })
  @IsOptional()
  memberIds?: string[];

  @IsUUID()
  @IsOptional()
  managerId?: string;

  @IsArray()
  @IsString({ each: true })
  @IsOptional()
  skills?: string[];

  @IsEnum(AssignmentStrategy)
  @IsOptional()
  assignmentStrategy?: AssignmentStrategy;
}

// ==================== 更新处理组 DTO ====================

export class UpdateGroupDto {
  @IsString()
  @IsOptional()
  @MaxLength(100)
  name?: string;

  @IsString()
  @IsOptional()
  description?: string;

  @IsArray()
  @IsUUID('4', { each: true })
  @IsOptional()
  memberIds?: string[];

  @IsUUID()
  @IsOptional()
  managerId?: string | null;

  @IsArray()
  @IsString({ each: true })
  @IsOptional()
  skills?: string[];

  @IsEnum(AssignmentStrategy)
  @IsOptional()
  assignmentStrategy?: AssignmentStrategy;

  @IsBoolean()
  @IsOptional()
  isActive?: boolean;
}

// ==================== 查询处理组 DTO ====================

export class QueryGroupDto {
  @IsBoolean()
  @IsOptional()
  @Transform(({ value }) => value === 'true' || value === true)
  isActive?: boolean;

  @IsString()
  @IsOptional()
  keyword?: string;
}

// ==================== 添加/移除成员 DTO ====================

export class UpdateGroupMembersDto {
  @IsArray()
  @IsUUID('4', { each: true })
  @IsNotEmpty()
  memberIds: string[];
}
