import { BaseResponse } from './base-response';
import {
  LabelDownload,
  FormDownload,
  Document,
  BillingLineItem,
  LabelPackage,
  Identifier,
  TimeWindow,
  RelayPointDetails,
  PaperlessDetails,
  PudoLocation,
  NativeRatingDetails,
} from '../models';
import { CarrierWeight } from '../models/units/carrier-weight';
import { LimitIdentifier } from '../models/limit-identifier';

/** @description Basic structure for a response to create a label */
export class CreateLabelResponse extends BaseResponse {
  transaction_id!: string;
  label_download?: LabelDownload;
  form_download?: FormDownload;
  paperless_details?: PaperlessDetails;
  documents?: Document[];
  packages?: LabelPackage[];
  billing_line_items?: BillingLineItem[];
  tracking_number?: string;
  tracking_url?: string;
  trackable?: boolean;
  alternative_identifiers?: Identifier[];
  estimated_delivery_datetime?: string;
  consolidator_service_code?: string;
  /** @description The carrier pickup window is the time designated when the carrier will pickup your package from the initial location */
  carrier_pickup_window?: TimeWindow;
  /** @description The delivery window is the time designated when the carrier will drop off the package to the recipient */
  delivery_window?: TimeWindow;
  relay_points?: RelayPointDetails;
  dropoff_location?: PudoLocation;
  pickup_location?: PudoLocation;
  carrier_weight?: CarrierWeight;
  limit_identifiers?: LimitIdentifier[];
  native_rating_details?: NativeRatingDetails;
}
