import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import { Type } from "class-transformer";
import {
  IsArray,
  IsDateString,
  IsInt,
  IsNotEmpty,
  IsOptional,
  IsString,
  Max,
  MaxLength,
  Min,
  ValidateNested,
} from "class-validator";
import { CreateVehiculoDto } from "../../vehiculos/dto/create-vehiculo.dto";

export class CreateOtDto {
  @ApiProperty({ description: "Tarjeta del cliente" })
  @IsNotEmpty({ message: "El cliente es requerido" })
  @IsString()
  @MaxLength(24)
  clienteTarjeta: string;

  @ApiPropertyOptional({ description: "ID del vehículo existente" })
  @IsOptional()
  @IsInt()
  vehiculoId?: number;

  @ApiPropertyOptional({ description: "Datos del nuevo vehículo" })
  @IsOptional()
  @ValidateNested()
  @Type(() => CreateVehiculoDto)
  vehiculo?: CreateVehiculoDto;

  @ApiProperty({ description: "Fecha de entrada (ISO)" })
  @IsNotEmpty({ message: "La fecha de entrada es requerida" })
  @IsDateString()
  fechaEntrada: string;

  @ApiProperty({ description: "Kilometraje" })
  @IsNotEmpty({ message: "El kilometraje es requerido" })
  @IsInt()
  @Min(0)
  km: number;

  @ApiPropertyOptional({ description: "Nivel de gasolina (0-100)", default: 0 })
  @IsOptional()
  @IsInt()
  @Min(0)
  @Max(100)
  nivelGasolina?: number;

  @ApiPropertyOptional({ description: "Requerimiento del cliente" })
  @IsOptional()
  @IsString()
  requerimientoCliente?: string;

  @ApiPropertyOptional({ description: "Observaciones" })
  @IsOptional()
  @IsString()
  observaciones?: string;

  @ApiPropertyOptional({ description: "IDs de cosas que trae el vehículo" })
  @IsOptional()
  @IsArray()
  @IsInt({ each: true })
  cosasTrae?: number[];

  @ApiPropertyOptional({
    description: "UUID local para sincronización offline",
  })
  @IsOptional()
  @IsString()
  @MaxLength(36)
  localId?: string;
}
