import {
  IsEmail,
  IsNotEmpty,
  IsOptional,
  IsString,
  Matches,
  MaxLength,
  MinLength,
} from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';

// 회원가입 DTO — 이메일/비밀번호/이름
export class SignupDto {
  @ApiProperty({ description: '사용자 이메일', example: 'sykim@acme.co' })
  @IsEmail({}, { message: '올바른 이메일 형식을 입력해 주세요.' })
  @IsNotEmpty({ message: '이메일은 필수 입력 항목입니다.' })
  email!: string;

  @ApiProperty({
    description: '비밀번호 (8~72자, 영문·숫자 포함)',
    example: 'password123',
  })
  @IsString()
  @MinLength(8, { message: '비밀번호는 최소 8자 이상이어야 합니다.' })
  // bcrypt 는 72바이트 초과분을 잘라내므로 길이를 제한해 혼동을 방지
  @MaxLength(72, { message: '비밀번호는 최대 72자까지 가능합니다.' })
  @Matches(/(?=.*[A-Za-z])(?=.*\d)/, {
    message: '비밀번호는 영문과 숫자를 모두 포함해야 합니다.',
  })
  password!: string;

  @ApiProperty({ description: '사용자 이름', example: '김서연' })
  @IsString()
  @IsNotEmpty({ message: '이름은 필수 입력 항목입니다.' })
  name!: string;

  @ApiProperty({
    description: '전사 직무(선택)',
    example: '콘텐츠 기획',
    required: false,
  })
  @IsOptional()
  @IsString()
  role?: string;
}
