import { CollectOnDelivery } from './collect-on-delivery';
import { Currency } from './currency';
import { DangerousGoodsContact } from './dangerous-good/dangerous-goods-contact';
import { WindsorFrameworkDetails } from './windsor-framework/windsor_framework_details';
import { AccessibilityTypes } from './accessibility-types';
import { Signatory } from './signatory';
import { RegulationLevelTypes } from './dangerous-good/regulation-level-types';
import { TransportMeanTypes } from './dangerous-good/transport-mean-types';
import { CustomerExpectedDelivery } from './customer-expected-delivery/customer-expected-delivery';

/** @description Basic structure for shipping options */
export class AdvancedOptions {
  /** @description Whether the user will upload documents */
  enable_document_upload?: boolean;
  /** @description Whether the shipment contains alcohol */
  contains_alcohol?: boolean;
  /** @description Whether the shipment does not require postage */
  no_postage?: boolean;
  /** @description Whether the shipment can be processed by machine */
  nonmachineable?: boolean;
  /** @description Whether the shipment duties should be billed to the sender */
  bill_duties_to_sender?: boolean;
  /** @description Whether Saturday delivery is permissible  */
  saturday_delivery?: boolean;
  /** @description Amount to be paid to the driver, used for local delivery and courier services */
  tip?: Currency;
  /** @description Describes whether Additional Handling is requested for the shipment  */
  additional_handling?: boolean;
  /** @description Describes details for Collect on Delivery (COD) if requested for the shipment */
  collect_on_delivery?: CollectOnDelivery;
  /** @description Whether client is requesting the ability to upload documents like commercial invoice after the shipment has been processed */
  own_document_upload?: boolean;
  /** @description Indicates if the Dangerous goods are present in the shipment. */
  dangerous_goods?: boolean;
  /** @description Contact information for Dangerous goods */
  dangerous_goods_contact?: DangerousGoodsContact;
  /** @description Describes the transport of dangerous goods that is restricted to Limited Quantities of Dangerous Goods only */
  limited_quantity?: boolean;
  /** @description Indicates whether the recipient should be notified of events related to the shipment. */
  event_notification?: boolean;
  /** @description Any other custom shipping options */
  windsor_framework_details?: WindsorFrameworkDetails;
  /** @description Identifies whatever the product being shipped is accessible or inaccessible during delivery.*/
  accessibility?: AccessibilityTypes;
  /** @description Specify the name, title and place of the signatory responsible for the dangerous goods shipment. */
  signatory?: Signatory;
  /** @description Types of regulation level defined for dangerous good */
  regulation_level?: RegulationLevelTypes;
  /** @description Transportation means through which the dangerous goods are transported */
  transport_mean?: TransportMeanTypes;
  /** @description Indicates whether the carrier should unpack the goods after delivery. */
  unpack?: boolean;
  /** @description Specifies whether the carrier should remove and dispose of the packaging materials after unpacking. */
  packaging_disposal?: boolean;
  /** @description Determines whether assembly of the delivered product is required. */
  assembly?: boolean;
  /** @description Indicates whether disassembly of existing items is required prior to delivery or installation. */
  disassembly?: boolean;
  /** @description The date range when the customer expects the shipment to be delivered. ISO 8601 format */
  customer_expected_delivery?: CustomerExpectedDelivery;
  /** @description Describes whether or not the shipment is fragile. */
  fragile?: boolean;
  /** @description A unique ID representing a specific carrier service-level or automation rule within the carrier's/aggregator's system. */
  service_configuration_id?: string;
  /** @description Indicates whether the recipient should be notified of events related to the shipment. */
  delivery_as_addressed?: boolean;
  /** @description Instructs the carrier to deliver the package only to the exact address provided. */
  return_after_first_attempt?: boolean;
  /** @description Ensures the shipment is immediately flagged for return to the sender if the initial delivery attempt fails. */
  [key: string]: any;
}
