import { Identifier } from '../identifier';
import { DimensionDetails } from '../units/dimension-details';
import { WeightDetails } from '../units/weight-details';
import { Dimensions } from '../units/dimensions';
import { Currency } from '../currency';
import { LabelMessage } from '../labels/label-message';
import { Customs } from '../customs';
import { ShippedProducts } from './shipped-products';

/** @description Basic structure for a package that has been shipped */
export class ShippedPackage {
  /** @description The carrier tracking number associated with this package */
  tracking_number?: string;
  /** @description The carrier tracking URL associated with this package */
  tracking_url?: string;
  /** @description Alternative identifiers associated with this package */
  alternative_identifiers?: Identifier[];
  /** @description Details about the dimensions of the package */
  dimension_details?: DimensionDetails;
  /** @description Details about the weight of the package */
  weight_details?: WeightDetails;
  /** @description The code associated with the package type */
  package_code?: string;
  /** @deprectated Please use the weight_details property */
  weight?: number;
  /** @deprectated Please use the dimension_details property */
  dimensions?: Dimensions;
  /** @description The insured value of this package. */
  insured_value!: Currency;
  /** @description The message the seller requested to have on their label */
  label_messages?: LabelMessage;
  /** @description Basic structure for a customs declaration (Only available on international shipments) */
  customs?: Customs;
  /** @description List of products associated with this package. */
  products?: ShippedProducts[];
}
