import { PackageInstructionSectionTypes } from './package-instruction-section-types';
import { PackagingGroupTypes } from './packaging-group-types';
import { RegulationLevelTypes } from './regulation-level-types';
import { TransportMeanTypes } from './transport-mean-types';
import { DangerousAmountDetails } from './weight-details';
import { AccessibilityTypes } from '../accessibility-types';
import { DangerousGoodsInnerPackaging } from './dangerous-goods-inner-packaging';

/** @description Basic structure for a dangerous goods */
export class DangerousGoods {
  /** @description UN number to identify the dangerous goods */
  id_number?: string;
  /** @description Trade description of the dangerous goods */
  shipping_name?: string;
  /** @description Recognized Technical or chemical name of dangerous goods */
  technical_name?: string;
  /** @description Dangerous goods product class based on regulation */
  product_class?: string;
  /** @description A secondary of product class for substances presenting more than one particular hazard */
  product_class_subsidiary?: string;
  /** @description This indicates the packaging group based on the degree of danger */
  packaging_group?: PackagingGroupTypes;
  /** @description The amount of the dangerous goods */
  dangerous_amount?: DangerousAmountDetails;
  /** @description Quantity of dangerous goods */
  quantity?: number;
  /** @description The specific standardized packaging instructions from the relevant regulatory agency that have been applied to the parcel/container */
  packaging_instruction?: string;
  /** @description Complementary information to specify the exact 'Section of Packaging' instructions */
  packaging_instruction_section?: PackageInstructionSectionTypes;
  /** @description The type of exterior packaging used to contain the dangerous good */
  packaging_type?: string;
  /** @description Transportation means through which the dangerous goods are transported */
  transport_mean?: TransportMeanTypes;
  /** @description Transport category assign to dangerous goods for the transport purpose */
  transport_category?: string;
  /** @description Name of the regulatory authority */
  regulation_authority?: string;
  /** @description Regulation level of the dangerous goods */
  regulation_level?: RegulationLevelTypes;
  /** @description Indication if the substance is radioactive */
  radioactive?: boolean;
  /** @description Indication if the substance needs to be reported to regulatory authority based on the quantity */
  reportable_quantity?: boolean;
  /** @description Defines which types of tunnels the shipment is allowed to go through */
  tunnel_code?: string;
  /** @description Provider additonal description regarding the dangerous goods. This is used as a placed holder to provider additional context and varies by carrier */
  additional_description?: string;
  /** @description Identifies whatever the product being shipped is accessible or inaccessible during delivery.*/
  accessibility?: AccessibilityTypes;
  /** @description A comma-separated list of special provisions (e.g., "A88, A183") that apply to the specific dangerous good as defined by the relevant dangerous goods regulations. These provisions may modify or clarify the general requirements. */
  special_provisions?: string;
  /** @description An object detailing the inner packaging of the dangerous good. */
  inner_packaging?: DangerousGoodsInnerPackaging;
}
