import { ApiProperty } from "@nestjs/swagger"
import {
  IsNotEmpty,
  IsOptional,
  IsInt,
  IsEnum,
  Min,
  Max,
} from "class-validator"
import { validationMessage } from "../../../utils/helpers"
import { messageKey } from "../../../constants/message-keys"
import { PayrollCycleStatus } from "../entities/payroll-cycle.entity"

export class CreatePayrollCycleDto {
  @ApiProperty({
    description: "Month (1-12)",
    example: 11,
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "month",
    }),
  })
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "month",
      ":type": "integer",
    }),
  })
  @Min(1, {
    message: validationMessage(messageKey.field_min_validation_error, {
      ":field": "month",
      ":min": "1",
    }),
  })
  @Max(12, {
    message: validationMessage(messageKey.field_max_validation_error, {
      ":field": "month",
      ":max": "12",
    }),
  })
  month: number

  @ApiProperty({
    description: "Year",
    example: 2025,
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "year",
    }),
  })
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "year",
      ":type": "integer",
    }),
  })
  @Min(2020, {
    message: validationMessage(messageKey.field_min_validation_error, {
      ":field": "year",
      ":min": "2020",
    }),
  })
  year: number

  @ApiProperty({
    description: "Payroll Status",
    example: PayrollCycleStatus.DRAFT,
    enum: PayrollCycleStatus,
    required: false,
  })
  @IsOptional()
  @IsEnum(PayrollCycleStatus, {
    message: validationMessage(messageKey.field_enum_validation_error, {
      ":field": "status",
      ":values": "0 (Draft), 1 (Finalized), 2 (Paid)",
    }),
  })
  status?: PayrollCycleStatus
}
