import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { IsArray, IsNotEmpty, IsOptional, IsString, IsUUID, ValidateNested } from 'class-validator';
import { CreatePedidoItemDto } from './create-pedido-item.dto';

export class CreatePedidoDto {
  @ApiProperty({ description: 'ID del cliente' })
  @IsNotEmpty()
  @IsUUID()
  cliente_id: string;

  @ApiPropertyOptional({ description: 'ID de la sucursal' })
  @IsOptional()
  @IsUUID()
  sucursal_id?: string;

  @ApiPropertyOptional({ description: 'ID del depósito por defecto' })
  @IsOptional()
  @IsUUID()
  deposito_id?: string;

  @ApiPropertyOptional({ description: 'ID del vendedor' })
  @IsOptional()
  @IsUUID()
  vendedor_id?: string;

  @ApiPropertyOptional({ description: 'ID de la moneda' })
  @IsOptional()
  @IsUUID()
  moneda_id?: string;

  @ApiPropertyOptional({ description: 'ID de la condición de operación' })
  @IsOptional()
  @IsUUID()
  condicion_operacion_id?: string;

  @ApiPropertyOptional({ description: 'ID de la lista de precios' })
  @IsOptional()
  @IsUUID()
  lista_precios_id?: string;

  @ApiPropertyOptional({ description: 'Observaciones del pedido' })
  @IsOptional()
  @IsString()
  observaciones?: string;

  @ApiPropertyOptional({ description: 'Referencia interna' })
  @IsOptional()
  @IsString()
  referencia_interna?: string;

  @ApiPropertyOptional({ description: 'Fecha de vencimiento del pedido (ISO string)' })
  @IsOptional()
  @IsString()
  fecha_vencimiento?: string;

  @ApiPropertyOptional({ description: 'Items del pedido', type: [CreatePedidoItemDto] })
  @IsOptional()
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => CreatePedidoItemDto)
  items?: CreatePedidoItemDto[];
}
