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

export class CreateSalaryStructureDto {
  @ApiProperty({
    description: "Employee ID",
    example: 1,
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "employee_id",
    }),
  })
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "employee_id",
      ":type": "integer",
    }),
  })
  employee_id: number

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

  @ApiProperty({
    description: "Effective From Date",
    example: "2025-01-01",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "effective_from",
    }),
  })
  @IsDateString(
    {},
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "effective_from",
        ":type": "date",
      }),
    },
  )
  effective_from: string

  @ApiProperty({
    description: "Effective To Date (optional for current active structure)",
    example: "2025-12-31",
    required: false,
  })
  @IsOptional()
  @IsDateString(
    {},
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "effective_to",
        ":type": "date",
      }),
    },
  )
  effective_to?: string

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