import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

import {

  IsEmail,

  IsOptional,

  IsString,

  MinLength,

} from 'class-validator';



/**

 * Accepts Flutter/mobile field names (`name`, `mobile`, `sitingLocation`)

 * and canonical API names. Normalized in UsersController before service call.

 */

export class AdminCreateUserDto {

  @ApiProperty()

  @IsEmail()

  email: string;



  @ApiProperty()

  @IsString()

  @MinLength(8)

  password: string;



  @ApiPropertyOptional({ description: 'Canonical field name' })

  @IsOptional()

  @IsString()

  fullName?: string;



  @ApiPropertyOptional({ description: 'Flutter field name for fullName' })

  @IsOptional()

  @IsString()

  name?: string;



  @ApiProperty()

  @IsString()

  employeeCode: string;



  @ApiPropertyOptional({ example: 'user', description: 'Flutter: user | admin' })

  @IsOptional()

  @IsString()

  role?: string;



  @ApiPropertyOptional({ description: 'Canonical field name' })

  @IsOptional()

  @IsString()

  mobileNumber?: string;



  @ApiPropertyOptional({ description: 'Flutter field name for mobileNumber' })

  @IsOptional()

  @IsString()

  mobile?: string;



  @ApiPropertyOptional({ description: 'Canonical field name' })

  @IsOptional()

  @IsString()

  sittingLocation?: string;



  @ApiPropertyOptional({ description: 'Flutter field name for sittingLocation' })

  @IsOptional()

  @IsString()

  sitingLocation?: string;



  @ApiPropertyOptional({ description: 'Manager MongoDB id or uid' })

  @IsOptional()

  @IsString()

  reportingManagerId?: string;



  @ApiPropertyOptional({ description: 'Manager uid (canonical)' })

  @IsOptional()

  @IsString()

  reportingManagerUid?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  deviceId?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  profileImage?: string;

}



export class AdminUpdateUserDto {

  @ApiPropertyOptional()

  @IsOptional()

  @IsEmail()

  email?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  fullName?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  name?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  employeeCode?: string;



  @ApiPropertyOptional({ example: 'user' })

  @IsOptional()

  @IsString()

  role?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  mobileNumber?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  mobile?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  sittingLocation?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  sitingLocation?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  reportingManagerId?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  reportingManagerUid?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  deviceId?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  profileImage?: string;

}



export class UpdateSelfDto {

  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  fullName?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  employeeCode?: string;



  @ApiPropertyOptional()

  @IsOptional()

  @IsString()

  fcmToken?: string;

}


