import { ApiProperty } from "@nestjs/swagger"
import {
  IsNotEmpty,
  IsOptional,
  IsInt,
  IsString,
  IsEmail,
} from "class-validator"
import { validationMessage } from "../../../utils/helpers"
import { messageKey } from "../../../constants/message-keys"

export class CreateContractorDto {
  @ApiProperty({
    description: "Contractor Name",
    example: "John Smith",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "contractor_name",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "contractor_name",
      ":type": "string",
    }),
  })
  contractor_name: string

  @ApiProperty({
    description: "Contractor Type ID",
    example: 1,
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "type_id",
    }),
  })
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "type_id",
      ":type": "integer",
    }),
  })
  type_id: number

  @ApiProperty({
    description: "Contractor Phone Number",
    example: "+1234567890",
    required: false,
  })
  @IsOptional()
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "phone_number",
      ":type": "string",
    }),
  })
  phone_number?: string

  @ApiProperty({
    description: "Contractor Email",
    example: "john.smith@example.com",
    required: false,
  })
  @IsOptional()
  @IsEmail(
    {},
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "email",
        ":type": "email",
      }),
    },
  )
  email?: string

  @ApiProperty({
    description: "Project ID",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "project_id",
      ":type": "integer",
    }),
  })
  project_id?: number

  @ApiProperty({
    description: "Contractor Notes",
    example: "Specialized in backend development",
    required: false,
  })
  @IsOptional()
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "notes",
      ":type": "string",
    }),
  })
  notes?: string
}
