import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { IsNotEmpty, IsOptional } from 'class-validator';
import { stringToBool } from 'src/utils';

export class CreateProductDto {
  @ApiProperty({ required: true })
  @IsNotEmpty()
  name: string;

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

  @ApiProperty({ required: true })
  @IsNotEmpty()
  categoryId: number;

  @ApiProperty({ required: true })
  @IsNotEmpty()
  manufacturerId: number;

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

  /**
   * -------------------------------------
   * Options
   */
  @ApiProperty({ required: true })
  @Transform(({ value }) => stringToBool(value))
  @IsNotEmpty()
  disableBuyButton: boolean;

  @ApiProperty({ required: true })
  @Transform(({ value }) => stringToBool(value))
  @IsNotEmpty()
  callForPrice: boolean;

  @ApiProperty({ required: true })
  @Transform(({ value }) => stringToBool(value))
  @IsNotEmpty()
  published: boolean;

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

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

  /**
   * -------------------------------------
   * Price
   */
  @ApiProperty({ required: true })
  @IsNotEmpty()
  price: number;

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

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

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

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

  @ApiProperty({ required: true })
  @Transform(({ value }) => stringToBool(value))
  @IsNotEmpty()
  isShowOldPrice: boolean;

  /**
   * -------------------------------------
   * Quantity
   */
  @ApiProperty({ required: true })
  @IsNotEmpty()
  stockQuantity: number;

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

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

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

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

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

  /**
   * -------------------------------------
   * Appearance information
   */
  @ApiProperty({ required: true })
  @IsNotEmpty()
  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;
}
