import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { IsIn, IsOptional } from 'class-validator';
import { stringToBool } from '../../../utils';
import { ProductWaitingOperation } from '../entities/product.entity';

export class UpdateProductDto {
  @ApiProperty({ example: '', required: false })
  @IsOptional()
  name: string;

  @ApiProperty({ required: false })
  @IsOptional()
  fullDescription: string;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  categoryId: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  manufacturerId: number;

  @ApiProperty({
    type: 'string',
    format: 'binary',
    required: false,
  })
  image: any;

  /**
   * -------------------------------------
   * Options
   */
  @ApiProperty({ example: '', required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  disableBuyButton: boolean;

  @ApiProperty({ example: '', required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  callForPrice: boolean;

  @ApiProperty({ example: '', required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  published: boolean;

  @ApiProperty({ example: '', required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  deleted: boolean;

  @ApiProperty({ required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  showOnHomePage: boolean;

  @ApiProperty({ required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  onlyOrderInService: boolean;

  /**
   * -------------------------------------
   * Price
   */
  @ApiProperty({ example: '', required: false })
  @IsOptional()
  price: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  priceInService: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  oldPrice: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  mainPrice: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  governmentPrice: number;

  @ApiProperty({ example: '', required: false })
  @Transform(({ value }) => stringToBool(value))
  @IsOptional()
  isShowOldPrice: boolean;

  /**
   * -------------------------------------
   * Quantity
   */
  @ApiProperty({ example: '', required: false })
  @IsOptional()
  stockQuantity: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  governmentOilStockQuantity: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  minStockQuantity: number;

  @ApiProperty({ required: false })
  @IsOptional()
  notifyAdminForQuantityBelow: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  orderMinimumQuantity: number;

  @ApiProperty({ example: '', required: false })
  @IsOptional()
  orderMaximumQuantity: number;

  /**
   * -------------------------------------
   * Appearance information
   */
  @ApiProperty({ required: true })
  @IsOptional()
  quantityUnitId: number;

  @ApiProperty({ required: false })
  @IsOptional()
  weight: string;

  @ApiProperty({ required: false })
  @IsOptional()
  length: string;

  @ApiProperty({ required: false })
  @IsOptional()
  width: string;

  @ApiProperty({ required: false })
  @IsOptional()
  height: string;

  /**
   * -------------------------------------
   * SEO
   */
  @ApiProperty({ required: false })
  @IsOptional()
  metaKeywords: string;

  @ApiProperty({ required: false })
  @IsOptional()
  metaDescription: string;

  @ApiProperty({ required: false })
  @IsOptional()
  metaTitle: string;

  /**
   * -------------------------------------
   */
  // @ApiProperty({ required: false, enum: ProductWaitingOperation })
  // @IsOptional()
  // @IsIn(Object.values(ProductWaitingOperation))
  // isWaitingOperation: ProductWaitingOperation;
}
