import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import { Type } from "class-transformer";
import {
  IsBoolean,
  IsNotEmpty,
  IsNumber,
  IsOptional,
  IsString,
  MaxLength,
  Min,
} from "class-validator";

export class CreateProductoDto {
  @ApiPropertyOptional({
    description: "Codigo PLU (si no se envia se genera automaticamente)",
  })
  @IsOptional()
  @IsString()
  @MaxLength(24)
  plu?: string;

  @ApiProperty({ description: "Descripcion larga" })
  @IsNotEmpty()
  @IsString()
  @MaxLength(255)
  desclarga: string;

  @ApiPropertyOptional({ description: "Descripcion corta" })
  @IsOptional()
  @IsString()
  @MaxLength(100)
  desccorta?: string;

  @ApiPropertyOptional({ description: "Codigo alterno" })
  @IsOptional()
  @IsString()
  @MaxLength(50)
  alterno?: string;

  @ApiPropertyOptional({ description: "Precio", default: 0 })
  @IsOptional()
  @Type(() => Number)
  @IsNumber({ maxDecimalPlaces: 2 })
  @Min(0)
  precio?: number;

  @ApiPropertyOptional({ description: "Paga IVA", default: false })
  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  pagaiva?: boolean;

  @ApiPropertyOptional({ description: "Porcentaje IVA", default: 0 })
  @IsOptional()
  @Type(() => Number)
  @IsNumber({ maxDecimalPlaces: 2 })
  @Min(0)
  iva?: number;

  @ApiPropertyOptional({ description: "Es servicio", default: false })
  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  esServicio?: boolean;

  @ApiPropertyOptional({ description: "Usa inventario", default: true })
  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  usainventario?: boolean;

  @ApiPropertyOptional({
    description: "Marca el producto para uso en taller/cotizacion",
    default: true,
  })
  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  estaller?: boolean;
}
