import {
  IsOptional,
  IsString,
  IsBoolean,
  IsUUID,
  IsEnum,
  IsNumber,
  MaxLength,
  Min,
  IsDateString,
} from 'class-validator';
import { VehicleStatus } from '../../../entities/vehicle.entity';
import { MediaItemDto, MediaListField } from '../../../common/media/media-item.dto';

export class CreateVehicleDto {
  @IsUUID()
  @IsOptional()
  destination_id?: string;

  @IsUUID()
  @IsOptional()
  supplier_id?: string;

  @IsUUID()
  @IsOptional()
  assigned_driver_id?: string;

  @IsString()
  @IsOptional()
  @MaxLength(50)
  vehicle_no?: string;

  @IsString()
  @IsOptional()
  @MaxLength(100)
  type?: string;

  @IsString()
  @IsOptional()
  @MaxLength(255)
  company?: string;

  @IsString()
  @IsOptional()
  @MaxLength(255)
  model?: string;

  @IsNumber()
  @IsOptional()
  @Min(1900)
  year?: number;

  @IsNumber()
  @IsOptional()
  @Min(1)
  capacity?: number;

  @IsNumber()
  @IsOptional()
  @Min(1)
  capping?: number;

  @IsString()
  @IsOptional()
  @MaxLength(50)
  fuel_type?: string;

  @IsString()
  @IsOptional()
  @MaxLength(50)
  color?: string;

  @IsDateString()
  @IsOptional()
  insurance_expiry?: string;

  @IsString()
  @IsOptional()
  features?: string;

  @IsEnum(VehicleStatus)
  @IsOptional()
  status?: VehicleStatus;

  @IsString()
  @IsOptional()
  notes?: string;

  @IsBoolean()
  @IsOptional()
  is_active?: boolean;

  @MediaListField()
  media?: MediaItemDto[];
}
