import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsEnum, IsInt, IsNotEmpty, IsOptional, IsString, MaxLength } from 'class-validator';
import { UserRole } from 'common/enum/UserRole.enum';

export class UpdateSubPermissionDto {
  @ApiPropertyOptional({
    description: 'Unique name of the sub-permission (e.g., CREATE_USER)',
    example: 'CREATE_USER',
  })
  @IsOptional()
  @IsString()
  @IsNotEmpty()
  name?: string;

  @ApiPropertyOptional({
    description: 'Display name of the sub-permission (used in UI)',
    example: 'Create User',
  })
  @IsOptional()
  @IsString()
  @MaxLength(150)
  displayName?: string;

  @ApiPropertyOptional({
    description: 'Detailed description of the sub-permission',
    example: 'Allows creating new users within the system',
  })
  @IsOptional()
  @IsString()
  description?: string;

  @ApiPropertyOptional({
    description: 'Type of user role this sub-permission applies to',
    enum: UserRole,
    default: UserRole.USER,
  })
  @IsOptional()
  @IsEnum(UserRole)
  permissionType?: UserRole;

  @ApiPropertyOptional({
    description: 'Status of the sub-permission (active or not)',
    example: true,
  })
  @IsOptional()
  @IsBoolean()
  isActive?: boolean;

  @ApiPropertyOptional({
    description: 'ID of the parent permission this sub-permission belongs to',
    example: 1,
  })
  @IsOptional()
  @IsInt()
  permissionId?: number;
}
