import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import {
  ArrayMaxSize,
  IsArray,
  IsISO8601,
  IsOptional,
  IsString,
  IsUUID,
  Length,
  Matches,
} from 'class-validator';

// 화상회의 방 생성 요청
export class CreateMeetingRoomDto {
  @ApiProperty({
    description: '방 이름(한글/영문/숫자/-/_ 허용, 공백 불가, 고유)',
    example: '주간-회의',
  })
  @IsString()
  @Length(1, 64, { message: '방 이름은 1~64자여야 합니다.' })
  @Matches(/^[A-Za-z0-9가-힣ㄱ-ㅎㅏ-ㅣ_-]+$/, {
    message:
      '방 이름은 한글, 영문, 숫자, 하이픈(-), 밑줄(_)만 사용할 수 있습니다. (공백 불가)',
  })
  name!: string;

  @ApiPropertyOptional({
    description: '예약 시각(ISO 8601). 미지정 시 즉시 사용 가능한 방',
    example: '2026-07-01T10:00:00.000Z',
  })
  @IsOptional()
  @IsISO8601({}, { message: '예약 시각 형식이 올바르지 않습니다.' })
  scheduledAt?: string;

  @ApiPropertyOptional({
    description: '참여 허용 사용자 ID 목록. 비우면 전체 공개',
    type: [String],
  })
  @IsOptional()
  @IsArray()
  @ArrayMaxSize(160, { message: '참여 허용 인원은 최대 160명입니다.' })
  @IsUUID('4', { each: true, message: '사용자 ID 형식이 올바르지 않습니다.' })
  allowedUserIds?: string[];
}
