import { ApiProperty } from "@nestjs/swagger"
import { IsOptional, IsString, IsNumber, Min, IsEnum } from "class-validator"
import appConfig from "src/config/app.config"

export enum VehicleOwnership {
  NUSKIN = "nuskin",
  DRIVER = "driver",
  THIRD_PARTY = "third-party",
}

export class FindAllFleetManagementDto {
  @ApiProperty({
    required: false,
    default: 10,
    description: "Number of records per page",
  })
  @IsOptional()
  @IsNumber()
  limit?: number = Number(appConfig().pagination.take)

  @ApiProperty({
    required: false,
    default: 0,
    description: "Number of records to skip",
  })
  @IsOptional()
  @IsNumber()
  @Min(0)
  skip?: number = Number(appConfig().pagination.skip)

  @ApiProperty({
    required: false,
    description: "Sort by field",
    example: "car_code",
  })
  @IsOptional()
  @IsString()
  sortBy?: string

  @ApiProperty({
    required: false,
    enum: ["ASC", "DESC"],
    description: "Sort order",
  })
  @IsOptional()
  sortOrder?: "ASC" | "DESC"

  @ApiProperty({
    required: false,
    description: "Search by car code, registration number, or VIN",
    example: "VEH-001",
  })
  @IsOptional()
  search?: string

  @ApiProperty({
    required: false,
    description: "Filter by vehicle manufacturer ID",
    example: 1,
  })
  @IsOptional()
  @IsNumber()
  vehicle_manufacture_id?: number

  @ApiProperty({
    required: false,
    description: "Filter by vehicle model ID",
    example: 1,
  })
  @IsOptional()
  @IsNumber()
  vehicle_model_id?: number

  @ApiProperty({
    required: false,
    description: "Filter by status",
    example: "active",
  })
  @IsOptional()
  @IsString()
  vehicle_status_id?: string

  @ApiProperty({
    required: false,
    description: "Filter by vehicle type ID",
    example: 1,
  })
  @IsOptional()
  @IsNumber()
  vehicle_type_id?: number

  @ApiProperty({
    required: false,
    description: "Filter by vehicle ownership",
    enum: VehicleOwnership,
    example: "nuskin",
  })
  @IsOptional()
  @IsEnum(VehicleOwnership)
  vehicle_ownership?: VehicleOwnership

  assigned_dispatcher_id: any
}
