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

export class MyFlagsByEmployeeIdFilterDto {
  @ApiProperty({
    description: "Page number for pagination",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "page",
      ":type": "integer",
    }),
  })
  page?: number

  @ApiProperty({
    description: "Number of items per page",
    example: 10,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "limit",
      ":type": "integer",
    }),
  })
  limit?: number

  @ApiProperty({
    description: "Search term for project name",
    example: "Website",
    required: false,
  })
  @IsOptional()
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "search",
      ":type": "string",
    }),
  })
  search?: string

  @ApiProperty({
    description: "Filter by status",
    example: "resolved",
    enum: ["pending", "resolved"],
    required: false,
  })
  @IsOptional()
  @IsEnum(["pending", "resolved"], {
    message: validationMessage(messageKey.field_enum_validation_error, {
      ":field": "status",
      ":values": "pending, resolved",
    }),
  })
  status?: string

  @ApiProperty({
    description: "Filter by action by ID",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "action by",
      ":type": "integer",
    }),
  })
  action_by_id?: number

  @ApiProperty({
    description: "Filter by flag ID",
    example: 1,
    required: false,
  })
  @IsOptional()
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "flag id",
      ":type": "integer",
    }),
  })
  flag_id?: number

  @ApiProperty({
    description: "Month (1-12)",
    example: 11,
    required: false,
  })
  @IsOptional()
  @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,
    required: false,
  })
  @IsOptional()
  @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
}
