import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsInt, IsEnum, IsOptional } from 'class-validator';
import { ParticipantRole } from 'src/common/enum/participant-role.enum';
import { RegistrationAction } from 'src/common/enum/registration-action.enum';

/** Register / unregister / downgrade a single program registrant on an online session. */
export class RegisterParticipantDto {
  @ApiProperty({ description: 'Program registration id (hdb_program_registration.id)' })
  @IsInt()
  registrationId: number;

  @ApiPropertyOptional({
    description:
      'Program session id to act on. Required when a registration spans multiple online sessions; defaults to the registration\'s own session.',
  })
  @IsOptional()
  @IsInt()
  sessionId?: number;

  @ApiProperty({
    description: 'Registration action',
    enum: RegistrationAction,
    default: RegistrationAction.REGISTER,
  })
  @IsEnum(RegistrationAction)
  action: RegistrationAction;

  @ApiPropertyOptional({
    description: 'Role to register as (only relevant for REGISTER)',
    enum: ParticipantRole,
    default: ParticipantRole.ATTENDEE,
  })
  @IsOptional()
  @IsEnum(ParticipantRole)
  role?: ParticipantRole;

  @ApiPropertyOptional({ description: 'Acting user id (set from auth context)' })
  @IsOptional()
  @IsInt()
  actingUserId?: number;
}
