/**
 * PostNL Ecommerce APIsLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import { ApiResponse, RequestOptions } from '../core';
import {
  ConfirmingMethodNotAllowedError,
} from '../errors/confirmingMethodNotAllowedError';
import { ConfirmingResponseError } from '../errors/confirmingResponseError';
import {
  ConfirmingResponseError1Error,
} from '../errors/confirmingResponseError1Error';
import {
  ConfirmingTooManyRequestError,
} from '../errors/confirmingTooManyRequestError';
import {
  ConfirmingUnauthorizedError,
} from '../errors/confirmingUnauthorizedError';
import {
  ConfirmingRequest,
  confirmingRequestSchema,
} from '../models/confirmingRequest';
import {
  ConfirmingResponse,
  confirmingResponseSchema,
} from '../models/confirmingResponse';
import { BaseController } from './baseController';

export class ConfirmingController extends BaseController {
  /**
   * Confirm a shipment to PostNL
   *
   * @param body
   * @return Response from the API call
   */
  async confirmAShipmentToPostNL(
    body: ConfirmingRequest,
    requestOptions?: RequestOptions
  ): Promise<ApiResponse<ConfirmingResponse>> {
    const req = this.createRequest('POST', '/shipment/v2/confirm');
    const mapped = req.prepareArgs({ body: [body, confirmingRequestSchema] });
    req.header('Content-Type', 'application/json');
    req.json(mapped.body);
    req.throwOn(400, ConfirmingResponseError, 'Error payload');
    req.throwOn(401, ConfirmingUnauthorizedError, 'Invalid apikey');
    req.throwOn(405, ConfirmingMethodNotAllowedError, 'Method not allowed');
    req.throwOn(429, ConfirmingTooManyRequestError, 'Too many requests');
    req.throwOn(500, ConfirmingResponseError1Error, 'Internal server error');
    return req.callAsJson(confirmingResponseSchema, requestOptions);
  }
}
