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

export class CreateActivityTypeDto {
  @ApiProperty({
    description: "Activity Type Name",
    example: "3D Architecture",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "name",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "name",
      ":type": "string",
    }),
  })
  name: string

  @ApiProperty({
    description: "Whether location is required for this activity",
    example: true,
    required: false,
  })
  @IsOptional()
  location_required?: number

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

  @ApiProperty({
    description:
      "Whether this activity type is productive (1) or non-productive (0)",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "is_productive",
      ":type": "integer",
    }),
  })
  is_productive?: number

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

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

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

  @ApiProperty({
    description: "Maximum threshold limit for non-productive activities",
    example: 30,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "maximum_threshold_limit",
      ":type": "integer",
    }),
  })
  maximum_threshold_limit?: number
}
