import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsEnum, IsOptional, IsNotEmpty, IsInt } from 'class-validator';
import { PermissionState } from 'common/enum/permission-state.enum';

export class UserPermissionOverrideDto {
  @ApiProperty({
    description: 'ID of the user for whom the override is being set',
    example: 1,
  })
  @IsInt()
  @IsNotEmpty()
  userId: number;

  @ApiPropertyOptional({
    description: 'ID of the permission (optional if subPermissionId is provided)',
    example: '223e4567-e89b-12d3-a456-426614174111',
  })
  @IsUUID()
  @IsOptional()
  permissionId?: string;

  @ApiPropertyOptional({
    description: 'ID of the sub-permission (optional if permissionId is provided)',
    example: '323e4567-e89b-12d3-a456-426614174222',
  })
  @IsUUID()
  @IsOptional()
  subPermissionId?: string;

  @ApiProperty({
    description: 'Override state for the permission/sub-permission',
    enum: PermissionState,
    example: PermissionState.ALLOW,
  })
  @IsEnum(PermissionState)
  @IsNotEmpty()
  state: PermissionState;

  @ApiPropertyOptional({
    description: 'ID of the client where the permission override applies',
    example: '423e4567-e89b-12d3-a456-426614174333',
  })
  @IsUUID()
  @IsOptional()
  clientId?: string;
}
