import {
  IsInt,
  IsOptional,
  IsString,
  IsUUID,
  Length,
  Max,
  Min,
} from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { DRIVE_MAX_FILE_SIZE } from '../drive.config';

// 업로드용 presigned URL 발급 요청
export class PresignUploadDto {
  @ApiProperty({ description: '원본 파일명', example: '기획서.pdf' })
  @IsString()
  @Length(1, 255, { message: '파일명은 1~255자로 입력해 주세요.' })
  filename!: string;

  @ApiProperty({
    description: 'MIME 타입(업로드 시 동일 Content-Type 으로 전송해야 함)',
    example: 'application/pdf',
  })
  @IsString()
  @Length(1, 255)
  contentType!: string;

  @ApiProperty({
    description: '파일 크기(바이트)',
    example: 1048576,
    maximum: DRIVE_MAX_FILE_SIZE,
  })
  @IsInt({ message: '파일 크기가 올바르지 않습니다.' })
  @Min(1, { message: '빈 파일은 업로드할 수 없습니다.' })
  @Max(DRIVE_MAX_FILE_SIZE, { message: '허용 최대 파일 크기를 초과했습니다.' })
  size!: number;

  @ApiPropertyOptional({
    description: '업로드 대상 폴더 ID (생략 시 드라이브 루트)',
    format: 'uuid',
  })
  @IsOptional()
  @IsUUID('4', { message: '올바른 폴더 ID가 아닙니다.' })
  folderId?: string;
}
