import { WeightDetails } from './units/weight-details';
import { Currency } from './currency';
import { DangerousGoods } from './dangerous-good/dangerous-goods';
import { UnitOfMeasureTypes } from './customs/unit-of-measure-types';

/** @description Basic structure for a product */
export class Products {
  /** @description A user specified free form string describing this customs item. If the field is absent the user has not specified a description */
  description?: string;
  /** @description The user specified count of items in this declaration. This value should be 1 or greater */
  quantity?: number;
  /** @description The user specified declared customs value of this customs item. Generally, this value needs to be greater than 0 to be accepted through customs */
  value?: Currency;
  /** @description The user specified declared country of origin of this customs item */
  country_of_origin?: string;
  /** @description The user specified Harmonized Tariff Code. See https://hts.usitc.gov/ for more information */
  harmonized_tariff_code?: string;
  /** @description The user specified unit of measure of this customs item */
  unit_of_measure?: UnitOfMeasureTypes;
  /** @description The user specified SKU of this customs item. This field is completely free form. */
  sku?: string;
  /** @description The user specified SKU description of this customs item. This field is completely free form. */
  sku_description?: string;
  /** @description Detailed information about the weight of this item */
  item_weight?: WeightDetails;
  /** @description A link to the item being shipped on the seller's website, used by customs officials to visually compare the item in the package to the available photo on the website. */
  product_url?: string;
  /** @description The VAT rate applicable to the item being shipped, expressed as a decimal value between 0 and 1. */
  vat_rate?: number;
  /** @description The Manufacturer Identification Code (MID). It is ussed as an alternative to the full name and address of a manufacturer, shipper or exporter and is always required for U.S. formal customs entries. */
  mid_code?: string;
  /** @description List of dangerous goods model associated with this package passed to the carrier. */
  dangerous_goods?: DangerousGoods[];
  /** @description Additional details for product. */
  [key: string]: any;
}
