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

export class CreateSalarySettingDto {
  @ApiProperty({
    description: "Salary Setting Name",
    example: "Basic Salary",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "name",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "name",
      ":type": "string",
    }),
  })
  name: string

  @ApiProperty({
    description: "Salary Setting Type",
    example: "earning",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "type",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "type",
      ":type": "string",
    }),
  })
  @IsIn(["earning", "deduction"], {
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "type",
      ":type": "earning or deduction",
    }),
  })
  type: string

  @ApiProperty({
    description: "Salary Setting Type Value",
    example: "percentage",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "type_value",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "type_value",
      ":type": "string",
    }),
  })
  @IsIn(["percentage", "fixed"], {
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "type_value",
      ":type": "percentage or fixed",
    }),
  })
  type_value: string

  @ApiProperty({
    description: "Salary Setting Value",
    example: "15.5",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "value",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "value",
      ":type": "string",
    }),
  })
  value: string

  @ApiProperty({
    description: "Salary Setting Is Taxable",
    example: 1,
  })
  @IsOptional()
  is_taxable: number
}
