import { IsArray, IsMongoId, IsOptional, IsString } from 'class-validator';
import { CommodityDto, EmployeeDto } from './create-shipment.dto';
import { ApiProperty } from '@nestjs/swagger';

export class UpdateShipmentDto {
  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Company name' })
  company_name: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Phone number' })
  phone_number: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Country code' })
  country_phone_code: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'First name' })
  first_name: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Last name' })
  last_name: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: `If it's new company or not`,
  })
  is_new_company: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Email' })
  email: string;

  @IsOptional()
  @IsString()
  name_en: string;

  @IsOptional()
  @IsString()
  name_ar: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Unique serial number for shipment',
  })
  serial_number: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Commodity name in english',
  })
  commodity_en: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Commodity name in arabic',
  })
  commodity_ar: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Pickup place name in english',
  })
  pickup_from_en: string; //////pickup place in english/////////

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Pickup place name in arabic',
  })
  pickup_from_ar: string; //////pickup place in arabic///////

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Delivery place name in english',
  })
  delivered_to_en: string; //////delivery place in arabic///////

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Delivery place name in arabic',
  })
  delivered_to_ar: string; //////delivery place in arabic///////

  @IsOptional()
  @IsString()
  @IsMongoId()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Shipment mode id',
  })
  shipment_mode: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Bill of lading' })
  bill_of_lading: string;

  @IsOptional()
  @IsArray()
  @ApiProperty({
    required: false,
    description: 'Container number',
  })
  container_number: any;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Container name' })
  container: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Vessel name' })
  vessel_name: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Voyage' })
  voyage: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: `Agent's person name`,
  })
  person_name_agent: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Agent name' })
  agent: string;

  @IsOptional()
  @IsString()
  @ApiProperty({ required: false, type: String, description: 'Shipping line' })
  shipping_line: string;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Shipment status',
  })
  shipment_status: string;

  @IsOptional()
  @ApiProperty({
    required: false,
    type: Array<EmployeeDto>,
    description: 'All employees',
  })
  employees: any | Array<EmployeeDto>;

  @IsOptional()
  @IsString()
  @ApiProperty({
    required: false,
    type: String,
    description: 'Estimated time of arrival',
  })
  eta: string;

  @IsOptional()
  @ApiProperty({
    required: false,
    type: Array<String>,
    description: 'Removed employees',
  })
  removed_employees: any | Array<string>;

  @IsOptional()
  @ApiProperty({
    required: false,
    type: Array<String>,
    description: 'Removed commodity',
  })
  removed_commodity: any | Array<string>;

  @IsOptional()
  @ApiProperty({
    required: false,
    type: Array<CommodityDto>,
    description: 'All commodities',
  })
  commodity: any | Array<CommodityDto>;
}
