import { IsEmail, IsNotEmpty, IsEnum, IsOptional, MinLength, IsString, IsDateString } from 'class-validator';
import { AttendanceMethod } from 'common/enums/attendance-method.enum';
import { Department, EmploymentType, UserRole, WorkMode } from 'common/enums/user.enum';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

export class CreateUserDto {
  @ApiProperty({ example: 'employee@glma.com' })
  @IsEmail()
  email: string;

  @ApiProperty({ example: 'password123', minLength: 6 })
  @IsNotEmpty()
  @MinLength(6)
  password: string;

  @ApiProperty({ example: 'John Doe' })
  @IsNotEmpty()
  name: string;

  @ApiProperty({ enum: UserRole, default: UserRole.EMPLOYEE })
  @IsEnum(UserRole)
  @IsOptional()
  role?: UserRole;

  @ApiProperty({ enum: AttendanceMethod, default: AttendanceMethod.GPS })
  @IsEnum(AttendanceMethod)
  @IsOptional()
  attendanceMethod?: AttendanceMethod;

  @ApiPropertyOptional({ example: 'DEVICE_001' })
  @IsOptional()
  @IsString()
  biometricDeviceId?: string;

  @ApiProperty({ enum: EmploymentType, default: EmploymentType.FULL_TIME })
  @IsEnum(EmploymentType)
  @IsOptional()
  employmentType?: EmploymentType;

  @ApiProperty({ enum: WorkMode, default: WorkMode.OFFICE })
  @IsEnum(WorkMode)
  @IsOptional()
  workMode?: WorkMode;

  @ApiProperty({ enum: Department, default: Department.SOFTWARE })
  @IsEnum(Department)
  @IsOptional()
  department?: Department;

  @ApiPropertyOptional({ example: '2024-01-01' })
  @IsOptional()
  @IsDateString()
  hireDate?: string;
}