import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import {
  IsDateString,
  IsEnum,
  IsInt,
  IsNotEmpty,
  IsOptional,
  IsString,
  Max,
  MaxLength,
  Min,
} from "class-validator";
import { EstadoOT } from "../entities/orden-trabajo.entity";

export class ChangeEstadoDto {
  @ApiProperty({ description: "Nuevo estado", enum: EstadoOT })
  @IsNotEmpty()
  @IsEnum(EstadoOT)
  estado: EstadoOT;

  @ApiPropertyOptional({
    description: 'Fecha de salida (requerida para estado "entregada")',
  })
  @IsOptional()
  @IsDateString()
  fechaSalida?: string;

  // Datos de la entrega: solo se usan cuando estado = "entregada".
  @ApiPropertyOptional({ description: "Kilometraje al entregar el vehículo" })
  @IsOptional()
  @IsInt()
  @Min(0)
  kmSalida?: number;

  @ApiPropertyOptional({ description: "Nivel de gasolina al entregar (0-100)" })
  @IsOptional()
  @IsInt()
  @Min(0)
  @Max(100)
  nivelGasolinaSalida?: number;

  @ApiPropertyOptional({
    description: "Recomendaciones / observaciones para el cliente",
  })
  @IsOptional()
  @IsString()
  @MaxLength(2000)
  recomendacionesEntrega?: string;

  @ApiPropertyOptional({ description: "Nombre de quien entrega el vehículo" })
  @IsOptional()
  @IsString()
  @MaxLength(255)
  entregadoPor?: string;

  @ApiPropertyOptional({ description: "URL de la firma de quien entrega" })
  @IsOptional()
  @IsString()
  @MaxLength(500)
  firmaEntrega?: string;
}

export type DatosEntrega = Pick<
  ChangeEstadoDto,
  | "kmSalida"
  | "nivelGasolinaSalida"
  | "recomendacionesEntrega"
  | "entregadoPor"
  | "firmaEntrega"
>;
