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

export class CreateLeaveTypeDto {
  @ApiProperty({
    description: "Leave Type Name",
    example: "Medical Leave",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "name",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "name",
      ":type": "string",
    }),
  })
  name: string

  @ApiProperty({
    description: "Leave Type Code",
    example: "ML",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "code",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "code",
      ":type": "string",
    }),
  })
  code: string

  @ApiProperty({
    description: "Annual Allowed Days (only for main leave types)",
    example: 15,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "annual_allowed_days",
      ":type": "integer",
    }),
  })
  @Min(0, {
    message: validationMessage(messageKey.field_min_validation_error, {
      ":field": "annual_allowed_days",
      ":min": "0",
    }),
  })
  annual_allowed_days?: number

  @ApiProperty({
    description: "Is Paid Leave (0 = Unpaid, 1 = Paid)",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "is_paid",
      ":type": "integer",
    }),
  })
  is_paid?: number

  @ApiProperty({
    description: "Can Carry Forward (0 = No, 1 = Yes)",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "carry_forward",
      ":type": "integer",
    }),
  })
  carry_forward?: number

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

  @ApiProperty({
    description: "Parent Leave Type ID (null for main leave types)",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "parent_id",
      ":type": "integer",
    }),
  })
  parent_id?: number
}
