import { IsString, IsNotEmpty, IsOptional, IsNumber, IsUUID, IsBoolean, IsArray } from 'class-validator';

export class CreateDepartmentDto {
  @IsUUID()
  @IsNotEmpty()
  organizationId: string; // v2.1: 部门所属组织 (必填)

  @IsString()
  @IsNotEmpty()
  name: string;

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

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

  @IsUUID()
  @IsOptional()
  headId?: string; // 部门主管（负责人）

  // v2.1 注意: regionIds 和 defaultRegionId 已废弃
  // 区域管理现在在 Organization 层，不在 Department 层
  // 保留这些字段以保持 API 向后兼容，但会被忽略
  @IsArray()
  @IsUUID('4', { each: true })
  @IsOptional()
  regionIds?: string[]; // 区域 ID 数组 (已废弃，会被忽略)

  @IsString()
  @IsOptional()
  defaultRegionId?: string; // 设为默认组织的区域 ID (已废弃，会被忽略)

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

  @IsNumber()
  @IsOptional()
  order?: number;
}

export class UpdateDepartmentDto {
  @IsString()
  @IsOptional()
  name?: string;

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

  @IsUUID()
  @IsOptional()
  headId?: string | null; // 部门主管（负责人）

  @IsArray()
  @IsUUID('4', { each: true })
  @IsOptional()
  regionIds?: string[]; // 区域 ID 数组

  @IsString()
  @IsOptional()
  defaultRegionId?: string; // 设为默认组织的区域 ID

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

  @IsNumber()
  @IsOptional()
  order?: number;
}

export class SetHeadDto {
  @IsUUID()
  @IsNotEmpty()
  headId: string; // 部门主管（负责人）
}

export class DepartmentQueryDto {
  @IsString()
  @IsOptional()
  keyword?: string;

  @IsUUID()
  @IsOptional()
  regionId?: string; // 按区域 ID 过滤

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

  @IsBoolean()
  @IsOptional()
  topLevelOnly?: boolean; // 只返回顶级组织（parentId = null）
}

export class BatchCreateDepartmentDto {
  @IsArray()
  @IsNotEmpty()
  departments: CreateDepartmentDto[];
}
