import {
  IsString,
  IsNotEmpty,
  IsOptional,
  IsEnum,
  IsUUID,
  IsArray,
  IsInt,
  Min,
  Max,
  MaxLength,
  IsBoolean,
} from 'class-validator';
import { Type, Transform } from 'class-transformer';
import { TicketPriority } from './ticket.dto';

// ==================== 创建分类 DTO ====================

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

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

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

  @IsString()
  @IsOptional()
  @MaxLength(50)
  icon?: string;

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

  @IsEnum(TicketPriority)
  @IsOptional()
  defaultPriority?: TicketPriority;

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

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

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

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

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

  @IsInt()
  @Min(0)
  @IsOptional()
  sortOrder?: number;
}

// ==================== 更新分类 DTO ====================

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

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

  @IsString()
  @IsOptional()
  @MaxLength(50)
  icon?: string;

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

  @IsEnum(TicketPriority)
  @IsOptional()
  defaultPriority?: TicketPriority;

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

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

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

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

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

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

  @IsInt()
  @Min(0)
  @IsOptional()
  sortOrder?: number;
}

// ==================== 查询分类 DTO ====================

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

  @IsBoolean()
  @IsOptional()
  @Transform(({ value }) => value === 'true' || value === true)
  includeChildren?: boolean;

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