import { ApiProperty } from "@nestjs/swagger"
import { Type } from "class-transformer"
import {
  IsBoolean,
  IsEnum,
  IsOptional,
  IsString,
  IsArray,
  ValidateNested,
} from "class-validator"

export enum DayOfWeek {
  MONDAY = "monday",
  TUESDAY = "tuesday",
  WEDNESDAY = "wednesday",
  THURSDAY = "thursday",
  FRIDAY = "friday",
  SATURDAY = "saturday",
  SUNDAY = "sunday",
}

export class CreateDriverAvailabilityDto {
  @IsOptional()
  driver_id?: number

  @ApiProperty({
    description: "Day of the week",
    enum: DayOfWeek,
    example: DayOfWeek.MONDAY,
    required: true,
  })
  @IsEnum(DayOfWeek)
  day_of_week: DayOfWeek

  @ApiProperty({
    description:
      "Start time for availability or ISO timestamp for duty status history",
    example: "2025-11-01T11:15:00.000Z",
    required: false,
  })
  @IsString()
  @IsOptional()
  start_time?: string

  @ApiProperty({
    description:
      "End time for availability or ISO timestamp for duty status history",
    example: "2025-11-01T11:15:00.000Z",
    required: false,
  })
  @IsString()
  @IsOptional()
  end_time?: string

  @ApiProperty({
    description: "Whether the driver is available or not",
    example: true,
    required: false,
  })
  @IsBoolean()
  @IsOptional()
  is_available?: boolean
}

export class CreateBulkDriverAvailabilityDto {
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => CreateDriverAvailabilityDto)
  availability: CreateDriverAvailabilityDto[]
}
