/**
 * BoldSign API
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 1
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';

import {
    ObjectSerializer, Authentication, VoidAuth, Interceptor,
    HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth, RequestFile, 
    BrandCreated,BrandingMessage,BrandingRecords,ErrorResult,ViewBrandDetails,
} from '../model';

import {
    HttpError,
    optionsI,
    returnTypeT,
    returnTypeI,
    generateFormData,
    toFormData,
    queryParamsSerializer,
    USER_AGENT,
} from './';

let defaultBasePath = 'https://api.boldsign.com';

// ===============================================
// This file is autogenerated - Please do not edit
// ===============================================


export class BrandingApi {
    protected _basePath = defaultBasePath;
    protected _defaultHeaders : any = { 'User-Agent': USER_AGENT };
    protected _useQuerystring : boolean = true;

    protected authentications = {
        'default': <Authentication>new VoidAuth(),
        'Bearer': new ApiKeyAuth('header', 'Authorization'),
        'X-API-KEY': new ApiKeyAuth('header', 'X-API-KEY'),
    }

    protected interceptors: Interceptor[] = [];

    constructor(basePath?: string) {
        if (basePath) {
            this.basePath = basePath;
        }
    }

    set useQuerystring(value: boolean) {
        this._useQuerystring = value;
    }

    set basePath(basePath: string) {
        this._basePath = basePath;
    }

    set defaultHeaders(defaultHeaders: any) {
        this._defaultHeaders = { ...defaultHeaders, "User-Agent": USER_AGENT };
    }

    get defaultHeaders() {
        return this._defaultHeaders;
    }

    get basePath() {
        return this._basePath;
    }

    public setDefaultAuthentication(auth: Authentication) {
        this.authentications.default = auth;
    }

    public setApiKey(apikey: string) {
        this.authentications["X-API-KEY"].apiKey = apikey;
    }

    public setAccessToken(accessToken: string) {
        this.authentications["Bearer"].apiKey = 'bearer ' + accessToken;
    }

    public addInterceptor(interceptor: Interceptor) {
        this.interceptors.push(interceptor);
    }

    /**
     * 
     * @summary List all the brands.
     * @param options
     */
    public async brandList (options: optionsI = {headers: {}}) : Promise<BrandingRecords> {
        const localVarPath = this.basePath + '/v1/brand/list';
        let localVarQueryParameters: any = {};
        let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
        const produces = ['application/json'];
        // give precedence to 'application/json'
        if (produces.indexOf('application/json') >= 0) {
            localVarHeaderParams['content-type'] = 'application/json';
        } else {
            localVarHeaderParams['content-type'] = produces.join(',');
        }
        let localVarFormParams: any = {};
        let localVarBodyParams: any = undefined;

        (<any>Object).assign(localVarHeaderParams, options.headers);

        let localVarUseFormData = false;

        let data = {};
        if (localVarUseFormData) {
          const formData = toFormData(localVarFormParams);
          data = formData;
          localVarHeaderParams = {
            ...localVarHeaderParams,
            ...formData.getHeaders(),
          };
        }

        let localVarRequestOptions: AxiosRequestConfig = {
            method: 'GET',
            params: localVarQueryParameters,
            headers: localVarHeaderParams,
            url: localVarPath,
            paramsSerializer: this._useQuerystring ? queryParamsSerializer : undefined,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
            responseType: "json",
        };

        if (localVarRequestOptions.method !== 'GET') {
           localVarRequestOptions.data = data;
        }
        let authenticationPromise = Promise.resolve();

        if (this.authentications["X-API-KEY"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["X-API-KEY"].applyToRequest(localVarRequestOptions));
        }
        if (this.authentications["Bearer"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["Bearer"].applyToRequest(localVarRequestOptions));
        }
        authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));

        let interceptorPromise = authenticationPromise;
        for (const interceptor of this.interceptors) {
            interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
        }

        return interceptorPromise.then(() => {
            return new Promise<BrandingRecords>((resolve, reject) => {
                axios.request(localVarRequestOptions)
                    .then((response) => {
                        handleSuccessfulResponse<BrandingRecords>(
                          resolve,
                          reject,
                          response,
                          "BrandingRecords",
                        );
                    }, (error: AxiosError) => {
                        if (error.response == null) {
                            reject(error);
                            return;
                        }

                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            200,
                            "BrandingRecords",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            401,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            403,
                            "ErrorResult",
                        )) {
                          return;
                        }


                        reject(error);
                    });
            });
        });
    }
    /**
     * 
     * @summary Create the brand.
     * @param brandName 
     * @param brandLogo 
     * @param backgroundColor 
     * @param buttonColor 
     * @param buttonTextColor 
     * @param emailDisplayName 
     * @param disclaimerDescription 
     * @param disclaimerTitle 
     * @param redirectUrl 
     * @param isDefault 
     * @param canHideTagLine 
     * @param combineAuditTrail 
     * @param combineAttachments 
     * @param excludeAuditTrailFromEmail 
     * @param emailSignedDocument 
     * @param documentTimeZone 
     * @param showBuiltInFormFields 
     * @param allowCustomFieldCreation 
     * @param showSharedCustomFields 
     * @param hideDecline 
     * @param hideSave 
     * @param documentExpirySettingsExpiryDateType 
     * @param documentExpirySettingsExpiryValue 
     * @param documentExpirySettingsEnableDefaultExpiryAlert 
     * @param documentExpirySettingsEnableAutoReminder 
     * @param documentExpirySettingsReminderDays 
     * @param documentExpirySettingsReminderCount 
     * @param customDomainSettingsDomainName 
     * @param customDomainSettingsFromName 
     * @param signatureFrameSettingsEnableSignatureFrame 
     * @param signatureFrameSettingsShowRecipientName 
     * @param signatureFrameSettingsShowRecipientEmail 
     * @param signatureFrameSettingsShowTimeStamp 
     * @param options
     */
    public async createBrand (brandName: string, brandLogo: RequestFile, backgroundColor?: string, buttonColor?: string, buttonTextColor?: string, emailDisplayName?: string, disclaimerDescription?: string, disclaimerTitle?: string, redirectUrl?: string, isDefault?: boolean, canHideTagLine?: boolean, combineAuditTrail?: boolean, combineAttachments?: boolean, excludeAuditTrailFromEmail?: boolean, emailSignedDocument?: string, documentTimeZone?: string, showBuiltInFormFields?: boolean, allowCustomFieldCreation?: boolean, showSharedCustomFields?: boolean, hideDecline?: boolean, hideSave?: boolean, documentExpirySettingsExpiryDateType?: string, documentExpirySettingsExpiryValue?: number, documentExpirySettingsEnableDefaultExpiryAlert?: boolean, documentExpirySettingsEnableAutoReminder?: boolean, documentExpirySettingsReminderDays?: number, documentExpirySettingsReminderCount?: number, customDomainSettingsDomainName?: string, customDomainSettingsFromName?: string, signatureFrameSettingsEnableSignatureFrame?: boolean, signatureFrameSettingsShowRecipientName?: boolean, signatureFrameSettingsShowRecipientEmail?: boolean, signatureFrameSettingsShowTimeStamp?: boolean, options: optionsI = {headers: {}}) : Promise<BrandCreated> {
        const localVarPath = this.basePath + '/v1/brand/create';
        let localVarQueryParameters: any = {};
        let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
        const produces = ['application/json;odata.metadata=minimal;odata.streaming=true', 'application/json;odata.metadata=minimal;odata.streaming=false', 'application/json;odata.metadata=minimal', 'application/json;odata.metadata=full;odata.streaming=true', 'application/json;odata.metadata=full;odata.streaming=false', 'application/json;odata.metadata=full', 'application/json;odata.metadata=none;odata.streaming=true', 'application/json;odata.metadata=none;odata.streaming=false', 'application/json;odata.metadata=none', 'application/json;odata.streaming=true', 'application/json;odata.streaming=false', 'application/json', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=full;IEEE754Compatible=false', 'application/json;odata.metadata=full;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=true', 'application/json;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.streaming=false;IEEE754Compatible=true', 'application/json;IEEE754Compatible=false', 'application/json;IEEE754Compatible=true', 'application/xml', 'text/plain', 'application/octet-stream', 'text/json'];
        // give precedence to 'application/json'
        if (produces.indexOf('application/json') >= 0) {
            localVarHeaderParams['content-type'] = 'application/json';
        } else {
            localVarHeaderParams['content-type'] = produces.join(',');
        }
        let localVarFormParams: any = {};
        let localVarBodyParams: any = undefined;

        // verify required parameter 'brandName' is not null or undefined
        if (brandName === null || brandName === undefined) {
            throw new Error('Required parameter brandName was null or undefined when calling createBrand.');
        }

        // verify required parameter 'brandLogo' is not null or undefined
        if (brandLogo === null || brandLogo === undefined) {
            throw new Error('Required parameter brandLogo was null or undefined when calling createBrand.');
        }

        (<any>Object).assign(localVarHeaderParams, options.headers);

        let localVarUseFormData = false;

        if (brandName !== undefined) {
            localVarFormParams['BrandName'] = ObjectSerializer.serialize(brandName, "string");
        }

        if (brandLogo !== undefined) {
            localVarFormParams['BrandLogo'] = brandLogo;
        }
        localVarUseFormData = true;

        if (backgroundColor !== undefined) {
            localVarFormParams['BackgroundColor'] = ObjectSerializer.serialize(backgroundColor, "string");
        }

        if (buttonColor !== undefined) {
            localVarFormParams['ButtonColor'] = ObjectSerializer.serialize(buttonColor, "string");
        }

        if (buttonTextColor !== undefined) {
            localVarFormParams['ButtonTextColor'] = ObjectSerializer.serialize(buttonTextColor, "string");
        }

        if (emailDisplayName !== undefined) {
            localVarFormParams['EmailDisplayName'] = ObjectSerializer.serialize(emailDisplayName, "string");
        }

        if (disclaimerDescription !== undefined) {
            localVarFormParams['DisclaimerDescription'] = ObjectSerializer.serialize(disclaimerDescription, "string");
        }

        if (disclaimerTitle !== undefined) {
            localVarFormParams['DisclaimerTitle'] = ObjectSerializer.serialize(disclaimerTitle, "string");
        }

        if (redirectUrl !== undefined) {
            localVarFormParams['RedirectUrl'] = ObjectSerializer.serialize(redirectUrl, "string");
        }

        if (isDefault !== undefined) {
            localVarFormParams['IsDefault'] = ObjectSerializer.serialize(isDefault, "boolean");
        }

        if (canHideTagLine !== undefined) {
            localVarFormParams['CanHideTagLine'] = ObjectSerializer.serialize(canHideTagLine, "boolean");
        }

        if (combineAuditTrail !== undefined) {
            localVarFormParams['CombineAuditTrail'] = ObjectSerializer.serialize(combineAuditTrail, "boolean");
        }

        if (combineAttachments !== undefined) {
            localVarFormParams['CombineAttachments'] = ObjectSerializer.serialize(combineAttachments, "boolean");
        }

        if (excludeAuditTrailFromEmail !== undefined) {
            localVarFormParams['ExcludeAuditTrailFromEmail'] = ObjectSerializer.serialize(excludeAuditTrailFromEmail, "boolean");
        }

        if (emailSignedDocument !== undefined) {
            localVarFormParams['EmailSignedDocument'] = ObjectSerializer.serialize(emailSignedDocument, "string");
        }

        if (documentTimeZone !== undefined) {
            localVarFormParams['DocumentTimeZone'] = ObjectSerializer.serialize(documentTimeZone, "string");
        }

        if (showBuiltInFormFields !== undefined) {
            localVarFormParams['ShowBuiltInFormFields'] = ObjectSerializer.serialize(showBuiltInFormFields, "boolean");
        }

        if (allowCustomFieldCreation !== undefined) {
            localVarFormParams['AllowCustomFieldCreation'] = ObjectSerializer.serialize(allowCustomFieldCreation, "boolean");
        }

        if (showSharedCustomFields !== undefined) {
            localVarFormParams['ShowSharedCustomFields'] = ObjectSerializer.serialize(showSharedCustomFields, "boolean");
        }

        if (hideDecline !== undefined) {
            localVarFormParams['HideDecline'] = ObjectSerializer.serialize(hideDecline, "boolean");
        }

        if (hideSave !== undefined) {
            localVarFormParams['HideSave'] = ObjectSerializer.serialize(hideSave, "boolean");
        }

        if (documentExpirySettingsExpiryDateType !== undefined) {
            localVarFormParams['DocumentExpirySettings.ExpiryDateType'] = ObjectSerializer.serialize(documentExpirySettingsExpiryDateType, "string");
        }

        if (documentExpirySettingsExpiryValue !== undefined) {
            localVarFormParams['DocumentExpirySettings.ExpiryValue'] = ObjectSerializer.serialize(documentExpirySettingsExpiryValue, "number");
        }

        if (documentExpirySettingsEnableDefaultExpiryAlert !== undefined) {
            localVarFormParams['DocumentExpirySettings.EnableDefaultExpiryAlert'] = ObjectSerializer.serialize(documentExpirySettingsEnableDefaultExpiryAlert, "boolean");
        }

        if (documentExpirySettingsEnableAutoReminder !== undefined) {
            localVarFormParams['DocumentExpirySettings.EnableAutoReminder'] = ObjectSerializer.serialize(documentExpirySettingsEnableAutoReminder, "boolean");
        }

        if (documentExpirySettingsReminderDays !== undefined) {
            localVarFormParams['DocumentExpirySettings.ReminderDays'] = ObjectSerializer.serialize(documentExpirySettingsReminderDays, "number");
        }

        if (documentExpirySettingsReminderCount !== undefined) {
            localVarFormParams['DocumentExpirySettings.ReminderCount'] = ObjectSerializer.serialize(documentExpirySettingsReminderCount, "number");
        }

        if (customDomainSettingsDomainName !== undefined) {
            localVarFormParams['CustomDomainSettings.DomainName'] = ObjectSerializer.serialize(customDomainSettingsDomainName, "string");
        }

        if (customDomainSettingsFromName !== undefined) {
            localVarFormParams['CustomDomainSettings.FromName'] = ObjectSerializer.serialize(customDomainSettingsFromName, "string");
        }

        if (signatureFrameSettingsEnableSignatureFrame !== undefined) {
            localVarFormParams['SignatureFrameSettings.EnableSignatureFrame'] = ObjectSerializer.serialize(signatureFrameSettingsEnableSignatureFrame, "boolean");
        }

        if (signatureFrameSettingsShowRecipientName !== undefined) {
            localVarFormParams['SignatureFrameSettings.ShowRecipientName'] = ObjectSerializer.serialize(signatureFrameSettingsShowRecipientName, "boolean");
        }

        if (signatureFrameSettingsShowRecipientEmail !== undefined) {
            localVarFormParams['SignatureFrameSettings.ShowRecipientEmail'] = ObjectSerializer.serialize(signatureFrameSettingsShowRecipientEmail, "boolean");
        }

        if (signatureFrameSettingsShowTimeStamp !== undefined) {
            localVarFormParams['SignatureFrameSettings.ShowTimeStamp'] = ObjectSerializer.serialize(signatureFrameSettingsShowTimeStamp, "boolean");
        }

        let data = {};
        if (localVarUseFormData) {
          const formData = toFormData(localVarFormParams);
          data = formData;
          localVarHeaderParams = {
            ...localVarHeaderParams,
            ...formData.getHeaders(),
          };
        }

        let localVarRequestOptions: AxiosRequestConfig = {
            method: 'POST',
            params: localVarQueryParameters,
            headers: localVarHeaderParams,
            url: localVarPath,
            paramsSerializer: this._useQuerystring ? queryParamsSerializer : undefined,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
            responseType: "json",
        };

        if (localVarRequestOptions.method !== 'GET') {
           localVarRequestOptions.data = data;
        }
        let authenticationPromise = Promise.resolve();

        if (this.authentications["X-API-KEY"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["X-API-KEY"].applyToRequest(localVarRequestOptions));
        }
        if (this.authentications["Bearer"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["Bearer"].applyToRequest(localVarRequestOptions));
        }
        authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));

        let interceptorPromise = authenticationPromise;
        for (const interceptor of this.interceptors) {
            interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
        }

        return interceptorPromise.then(() => {
            return new Promise<BrandCreated>((resolve, reject) => {
                axios.request(localVarRequestOptions)
                    .then((response) => {
                        handleSuccessfulResponse<BrandCreated>(
                          resolve,
                          reject,
                          response,
                          "BrandCreated",
                        );
                    }, (error: AxiosError) => {
                        if (error.response == null) {
                            reject(error);
                            return;
                        }

                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            200,
                            "BrandCreated",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            401,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            403,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            422,
                            "ErrorResult",
                        )) {
                          return;
                        }


                        reject(error);
                    });
            });
        });
    }
    /**
     * 
     * @summary Delete the brand.
     * @param brandId brand Id.
     * @param options
     */
    public async deleteBrand (brandId: string, options: optionsI = {headers: {}}) : Promise<BrandingMessage> {
        const localVarPath = this.basePath + '/v1/brand/delete';
        let localVarQueryParameters: any = {};
        let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
        const produces = ['application/json;odata.metadata=minimal;odata.streaming=true', 'application/json;odata.metadata=minimal;odata.streaming=false', 'application/json;odata.metadata=minimal', 'application/json;odata.metadata=full;odata.streaming=true', 'application/json;odata.metadata=full;odata.streaming=false', 'application/json;odata.metadata=full', 'application/json;odata.metadata=none;odata.streaming=true', 'application/json;odata.metadata=none;odata.streaming=false', 'application/json;odata.metadata=none', 'application/json;odata.streaming=true', 'application/json;odata.streaming=false', 'application/json', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=full;IEEE754Compatible=false', 'application/json;odata.metadata=full;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=true', 'application/json;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.streaming=false;IEEE754Compatible=true', 'application/json;IEEE754Compatible=false', 'application/json;IEEE754Compatible=true', 'application/xml', 'text/plain', 'application/octet-stream', 'text/json'];
        // give precedence to 'application/json'
        if (produces.indexOf('application/json') >= 0) {
            localVarHeaderParams['content-type'] = 'application/json';
        } else {
            localVarHeaderParams['content-type'] = produces.join(',');
        }
        let localVarFormParams: any = {};
        let localVarBodyParams: any = undefined;

        // verify required parameter 'brandId' is not null or undefined
        if (brandId === null || brandId === undefined) {
            throw new Error('Required parameter brandId was null or undefined when calling deleteBrand.');
        }

        if (brandId !== undefined) {
            localVarQueryParameters['brandId'] = ObjectSerializer.serialize(brandId, "string");
        }

        (<any>Object).assign(localVarHeaderParams, options.headers);

        let localVarUseFormData = false;

        let data = {};
        if (localVarUseFormData) {
          const formData = toFormData(localVarFormParams);
          data = formData;
          localVarHeaderParams = {
            ...localVarHeaderParams,
            ...formData.getHeaders(),
          };
        }

        let localVarRequestOptions: AxiosRequestConfig = {
            method: 'DELETE',
            params: localVarQueryParameters,
            headers: localVarHeaderParams,
            url: localVarPath,
            paramsSerializer: this._useQuerystring ? queryParamsSerializer : undefined,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
            responseType: "json",
        };

        if (localVarRequestOptions.method !== 'GET') {
           localVarRequestOptions.data = data;
        }
        let authenticationPromise = Promise.resolve();

        if (this.authentications["X-API-KEY"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["X-API-KEY"].applyToRequest(localVarRequestOptions));
        }
        if (this.authentications["Bearer"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["Bearer"].applyToRequest(localVarRequestOptions));
        }
        authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));

        let interceptorPromise = authenticationPromise;
        for (const interceptor of this.interceptors) {
            interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
        }

        return interceptorPromise.then(() => {
            return new Promise<BrandingMessage>((resolve, reject) => {
                axios.request(localVarRequestOptions)
                    .then((response) => {
                        handleSuccessfulResponse<BrandingMessage>(
                          resolve,
                          reject,
                          response,
                          "BrandingMessage",
                        );
                    }, (error: AxiosError) => {
                        if (error.response == null) {
                            reject(error);
                            return;
                        }

                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            200,
                            "BrandingMessage",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            401,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            403,
                            "ErrorResult",
                        )) {
                          return;
                        }


                        reject(error);
                    });
            });
        });
    }
    /**
     * 
     * @summary Edit the brand.
     * @param brandId The brand id.
     * @param brandName 
     * @param brandLogo 
     * @param backgroundColor 
     * @param buttonColor 
     * @param buttonTextColor 
     * @param emailDisplayName 
     * @param disclaimerDescription 
     * @param disclaimerTitle 
     * @param redirectUrl 
     * @param isDefault 
     * @param canHideTagLine 
     * @param combineAuditTrail 
     * @param combineAttachments 
     * @param excludeAuditTrailFromEmail 
     * @param emailSignedDocument 
     * @param documentTimeZone 
     * @param showBuiltInFormFields 
     * @param allowCustomFieldCreation 
     * @param showSharedCustomFields 
     * @param hideDecline 
     * @param hideSave 
     * @param documentExpirySettingsExpiryDateType 
     * @param documentExpirySettingsExpiryValue 
     * @param documentExpirySettingsEnableDefaultExpiryAlert 
     * @param documentExpirySettingsEnableAutoReminder 
     * @param documentExpirySettingsReminderDays 
     * @param documentExpirySettingsReminderCount 
     * @param customDomainSettingsDomainName 
     * @param customDomainSettingsFromName 
     * @param signatureFrameSettingsEnableSignatureFrame 
     * @param signatureFrameSettingsShowRecipientName 
     * @param signatureFrameSettingsShowRecipientEmail 
     * @param signatureFrameSettingsShowTimeStamp 
     * @param options
     */
    public async editBrand (brandId: string, brandName?: string, brandLogo?: RequestFile, backgroundColor?: string, buttonColor?: string, buttonTextColor?: string, emailDisplayName?: string, disclaimerDescription?: string, disclaimerTitle?: string, redirectUrl?: string, isDefault?: boolean, canHideTagLine?: boolean, combineAuditTrail?: boolean, combineAttachments?: boolean, excludeAuditTrailFromEmail?: boolean, emailSignedDocument?: string, documentTimeZone?: string, showBuiltInFormFields?: boolean, allowCustomFieldCreation?: boolean, showSharedCustomFields?: boolean, hideDecline?: boolean, hideSave?: boolean, documentExpirySettingsExpiryDateType?: string, documentExpirySettingsExpiryValue?: number, documentExpirySettingsEnableDefaultExpiryAlert?: boolean, documentExpirySettingsEnableAutoReminder?: boolean, documentExpirySettingsReminderDays?: number, documentExpirySettingsReminderCount?: number, customDomainSettingsDomainName?: string, customDomainSettingsFromName?: string, signatureFrameSettingsEnableSignatureFrame?: boolean, signatureFrameSettingsShowRecipientName?: boolean, signatureFrameSettingsShowRecipientEmail?: boolean, signatureFrameSettingsShowTimeStamp?: boolean, options: optionsI = {headers: {}}) : Promise<BrandCreated> {
        const localVarPath = this.basePath + '/v1/brand/edit';
        let localVarQueryParameters: any = {};
        let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
        const produces = ['application/json;odata.metadata=minimal;odata.streaming=true', 'application/json;odata.metadata=minimal;odata.streaming=false', 'application/json;odata.metadata=minimal', 'application/json;odata.metadata=full;odata.streaming=true', 'application/json;odata.metadata=full;odata.streaming=false', 'application/json;odata.metadata=full', 'application/json;odata.metadata=none;odata.streaming=true', 'application/json;odata.metadata=none;odata.streaming=false', 'application/json;odata.metadata=none', 'application/json;odata.streaming=true', 'application/json;odata.streaming=false', 'application/json', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=full;IEEE754Compatible=false', 'application/json;odata.metadata=full;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=true', 'application/json;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.streaming=false;IEEE754Compatible=true', 'application/json;IEEE754Compatible=false', 'application/json;IEEE754Compatible=true', 'application/xml', 'text/plain', 'application/octet-stream', 'text/json'];
        // give precedence to 'application/json'
        if (produces.indexOf('application/json') >= 0) {
            localVarHeaderParams['content-type'] = 'application/json';
        } else {
            localVarHeaderParams['content-type'] = produces.join(',');
        }
        let localVarFormParams: any = {};
        let localVarBodyParams: any = undefined;

        // verify required parameter 'brandId' is not null or undefined
        if (brandId === null || brandId === undefined) {
            throw new Error('Required parameter brandId was null or undefined when calling editBrand.');
        }

        if (brandId !== undefined) {
            localVarQueryParameters['brandId'] = ObjectSerializer.serialize(brandId, "string");
        }

        (<any>Object).assign(localVarHeaderParams, options.headers);

        let localVarUseFormData = false;

        if (brandName !== undefined) {
            localVarFormParams['BrandName'] = ObjectSerializer.serialize(brandName, "string");
        }

        if (brandLogo !== undefined) {
            localVarFormParams['BrandLogo'] = brandLogo;
        }
        localVarUseFormData = true;

        if (backgroundColor !== undefined) {
            localVarFormParams['BackgroundColor'] = ObjectSerializer.serialize(backgroundColor, "string");
        }

        if (buttonColor !== undefined) {
            localVarFormParams['ButtonColor'] = ObjectSerializer.serialize(buttonColor, "string");
        }

        if (buttonTextColor !== undefined) {
            localVarFormParams['ButtonTextColor'] = ObjectSerializer.serialize(buttonTextColor, "string");
        }

        if (emailDisplayName !== undefined) {
            localVarFormParams['EmailDisplayName'] = ObjectSerializer.serialize(emailDisplayName, "string");
        }

        if (disclaimerDescription !== undefined) {
            localVarFormParams['DisclaimerDescription'] = ObjectSerializer.serialize(disclaimerDescription, "string");
        }

        if (disclaimerTitle !== undefined) {
            localVarFormParams['DisclaimerTitle'] = ObjectSerializer.serialize(disclaimerTitle, "string");
        }

        if (redirectUrl !== undefined) {
            localVarFormParams['RedirectUrl'] = ObjectSerializer.serialize(redirectUrl, "string");
        }

        if (isDefault !== undefined) {
            localVarFormParams['IsDefault'] = ObjectSerializer.serialize(isDefault, "boolean");
        }

        if (canHideTagLine !== undefined) {
            localVarFormParams['CanHideTagLine'] = ObjectSerializer.serialize(canHideTagLine, "boolean");
        }

        if (combineAuditTrail !== undefined) {
            localVarFormParams['CombineAuditTrail'] = ObjectSerializer.serialize(combineAuditTrail, "boolean");
        }

        if (combineAttachments !== undefined) {
            localVarFormParams['CombineAttachments'] = ObjectSerializer.serialize(combineAttachments, "boolean");
        }

        if (excludeAuditTrailFromEmail !== undefined) {
            localVarFormParams['ExcludeAuditTrailFromEmail'] = ObjectSerializer.serialize(excludeAuditTrailFromEmail, "boolean");
        }

        if (emailSignedDocument !== undefined) {
            localVarFormParams['EmailSignedDocument'] = ObjectSerializer.serialize(emailSignedDocument, "string");
        }

        if (documentTimeZone !== undefined) {
            localVarFormParams['DocumentTimeZone'] = ObjectSerializer.serialize(documentTimeZone, "string");
        }

        if (showBuiltInFormFields !== undefined) {
            localVarFormParams['ShowBuiltInFormFields'] = ObjectSerializer.serialize(showBuiltInFormFields, "boolean");
        }

        if (allowCustomFieldCreation !== undefined) {
            localVarFormParams['AllowCustomFieldCreation'] = ObjectSerializer.serialize(allowCustomFieldCreation, "boolean");
        }

        if (showSharedCustomFields !== undefined) {
            localVarFormParams['ShowSharedCustomFields'] = ObjectSerializer.serialize(showSharedCustomFields, "boolean");
        }

        if (hideDecline !== undefined) {
            localVarFormParams['HideDecline'] = ObjectSerializer.serialize(hideDecline, "boolean");
        }

        if (hideSave !== undefined) {
            localVarFormParams['HideSave'] = ObjectSerializer.serialize(hideSave, "boolean");
        }

        if (documentExpirySettingsExpiryDateType !== undefined) {
            localVarFormParams['DocumentExpirySettings.ExpiryDateType'] = ObjectSerializer.serialize(documentExpirySettingsExpiryDateType, "string");
        }

        if (documentExpirySettingsExpiryValue !== undefined) {
            localVarFormParams['DocumentExpirySettings.ExpiryValue'] = ObjectSerializer.serialize(documentExpirySettingsExpiryValue, "number");
        }

        if (documentExpirySettingsEnableDefaultExpiryAlert !== undefined) {
            localVarFormParams['DocumentExpirySettings.EnableDefaultExpiryAlert'] = ObjectSerializer.serialize(documentExpirySettingsEnableDefaultExpiryAlert, "boolean");
        }

        if (documentExpirySettingsEnableAutoReminder !== undefined) {
            localVarFormParams['DocumentExpirySettings.EnableAutoReminder'] = ObjectSerializer.serialize(documentExpirySettingsEnableAutoReminder, "boolean");
        }

        if (documentExpirySettingsReminderDays !== undefined) {
            localVarFormParams['DocumentExpirySettings.ReminderDays'] = ObjectSerializer.serialize(documentExpirySettingsReminderDays, "number");
        }

        if (documentExpirySettingsReminderCount !== undefined) {
            localVarFormParams['DocumentExpirySettings.ReminderCount'] = ObjectSerializer.serialize(documentExpirySettingsReminderCount, "number");
        }

        if (customDomainSettingsDomainName !== undefined) {
            localVarFormParams['CustomDomainSettings.DomainName'] = ObjectSerializer.serialize(customDomainSettingsDomainName, "string");
        }

        if (customDomainSettingsFromName !== undefined) {
            localVarFormParams['CustomDomainSettings.FromName'] = ObjectSerializer.serialize(customDomainSettingsFromName, "string");
        }

        if (signatureFrameSettingsEnableSignatureFrame !== undefined) {
            localVarFormParams['SignatureFrameSettings.EnableSignatureFrame'] = ObjectSerializer.serialize(signatureFrameSettingsEnableSignatureFrame, "boolean");
        }

        if (signatureFrameSettingsShowRecipientName !== undefined) {
            localVarFormParams['SignatureFrameSettings.ShowRecipientName'] = ObjectSerializer.serialize(signatureFrameSettingsShowRecipientName, "boolean");
        }

        if (signatureFrameSettingsShowRecipientEmail !== undefined) {
            localVarFormParams['SignatureFrameSettings.ShowRecipientEmail'] = ObjectSerializer.serialize(signatureFrameSettingsShowRecipientEmail, "boolean");
        }

        if (signatureFrameSettingsShowTimeStamp !== undefined) {
            localVarFormParams['SignatureFrameSettings.ShowTimeStamp'] = ObjectSerializer.serialize(signatureFrameSettingsShowTimeStamp, "boolean");
        }

        let data = {};
        if (localVarUseFormData) {
          const formData = toFormData(localVarFormParams);
          data = formData;
          localVarHeaderParams = {
            ...localVarHeaderParams,
            ...formData.getHeaders(),
          };
        }

        let localVarRequestOptions: AxiosRequestConfig = {
            method: 'POST',
            params: localVarQueryParameters,
            headers: localVarHeaderParams,
            url: localVarPath,
            paramsSerializer: this._useQuerystring ? queryParamsSerializer : undefined,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
            responseType: "json",
        };

        if (localVarRequestOptions.method !== 'GET') {
           localVarRequestOptions.data = data;
        }
        let authenticationPromise = Promise.resolve();

        if (this.authentications["X-API-KEY"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["X-API-KEY"].applyToRequest(localVarRequestOptions));
        }
        if (this.authentications["Bearer"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["Bearer"].applyToRequest(localVarRequestOptions));
        }
        authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));

        let interceptorPromise = authenticationPromise;
        for (const interceptor of this.interceptors) {
            interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
        }

        return interceptorPromise.then(() => {
            return new Promise<BrandCreated>((resolve, reject) => {
                axios.request(localVarRequestOptions)
                    .then((response) => {
                        handleSuccessfulResponse<BrandCreated>(
                          resolve,
                          reject,
                          response,
                          "BrandCreated",
                        );
                    }, (error: AxiosError) => {
                        if (error.response == null) {
                            reject(error);
                            return;
                        }

                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            200,
                            "BrandCreated",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            401,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            403,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            422,
                            "ErrorResult",
                        )) {
                          return;
                        }


                        reject(error);
                    });
            });
        });
    }
    /**
     * 
     * @summary Get the specific brand details.
     * @param brandId The brand id.
     * @param options
     */
    public async getBrand (brandId: string, options: optionsI = {headers: {}}) : Promise<ViewBrandDetails> {
        const localVarPath = this.basePath + '/v1/brand/get';
        let localVarQueryParameters: any = {};
        let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
        const produces = ['application/json'];
        // give precedence to 'application/json'
        if (produces.indexOf('application/json') >= 0) {
            localVarHeaderParams['content-type'] = 'application/json';
        } else {
            localVarHeaderParams['content-type'] = produces.join(',');
        }
        let localVarFormParams: any = {};
        let localVarBodyParams: any = undefined;

        // verify required parameter 'brandId' is not null or undefined
        if (brandId === null || brandId === undefined) {
            throw new Error('Required parameter brandId was null or undefined when calling getBrand.');
        }

        if (brandId !== undefined) {
            localVarQueryParameters['brandId'] = ObjectSerializer.serialize(brandId, "string");
        }

        (<any>Object).assign(localVarHeaderParams, options.headers);

        let localVarUseFormData = false;

        let data = {};
        if (localVarUseFormData) {
          const formData = toFormData(localVarFormParams);
          data = formData;
          localVarHeaderParams = {
            ...localVarHeaderParams,
            ...formData.getHeaders(),
          };
        }

        let localVarRequestOptions: AxiosRequestConfig = {
            method: 'GET',
            params: localVarQueryParameters,
            headers: localVarHeaderParams,
            url: localVarPath,
            paramsSerializer: this._useQuerystring ? queryParamsSerializer : undefined,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
            responseType: "json",
        };

        if (localVarRequestOptions.method !== 'GET') {
           localVarRequestOptions.data = data;
        }
        let authenticationPromise = Promise.resolve();

        if (this.authentications["X-API-KEY"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["X-API-KEY"].applyToRequest(localVarRequestOptions));
        }
        if (this.authentications["Bearer"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["Bearer"].applyToRequest(localVarRequestOptions));
        }
        authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));

        let interceptorPromise = authenticationPromise;
        for (const interceptor of this.interceptors) {
            interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
        }

        return interceptorPromise.then(() => {
            return new Promise<ViewBrandDetails>((resolve, reject) => {
                axios.request(localVarRequestOptions)
                    .then((response) => {
                        handleSuccessfulResponse<ViewBrandDetails>(
                          resolve,
                          reject,
                          response,
                          "ViewBrandDetails",
                        );
                    }, (error: AxiosError) => {
                        if (error.response == null) {
                            reject(error);
                            return;
                        }

                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            200,
                            "ViewBrandDetails",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            401,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            403,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            422,
                            "ErrorResult",
                        )) {
                          return;
                        }


                        reject(error);
                    });
            });
        });
    }
    /**
     * 
     * @summary Reset default brand.
     * @param brandId brand Id.
     * @param options
     */
    public async resetDefaultBrand (brandId: string, options: optionsI = {headers: {}}) : Promise<BrandingMessage> {
        const localVarPath = this.basePath + '/v1/brand/resetdefault';
        let localVarQueryParameters: any = {};
        let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
        const produces = ['application/json;odata.metadata=minimal;odata.streaming=true', 'application/json;odata.metadata=minimal;odata.streaming=false', 'application/json;odata.metadata=minimal', 'application/json;odata.metadata=full;odata.streaming=true', 'application/json;odata.metadata=full;odata.streaming=false', 'application/json;odata.metadata=full', 'application/json;odata.metadata=none;odata.streaming=true', 'application/json;odata.metadata=none;odata.streaming=false', 'application/json;odata.metadata=none', 'application/json;odata.streaming=true', 'application/json;odata.streaming=false', 'application/json', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=minimal;IEEE754Compatible=false', 'application/json;odata.metadata=minimal;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=full;IEEE754Compatible=false', 'application/json;odata.metadata=full;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=true', 'application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=false', 'application/json;odata.metadata=none;IEEE754Compatible=true', 'application/json;odata.streaming=true;IEEE754Compatible=false', 'application/json;odata.streaming=true;IEEE754Compatible=true', 'application/json;odata.streaming=false;IEEE754Compatible=false', 'application/json;odata.streaming=false;IEEE754Compatible=true', 'application/json;IEEE754Compatible=false', 'application/json;IEEE754Compatible=true', 'application/xml', 'text/plain', 'application/octet-stream', 'text/json'];
        // give precedence to 'application/json'
        if (produces.indexOf('application/json') >= 0) {
            localVarHeaderParams['content-type'] = 'application/json';
        } else {
            localVarHeaderParams['content-type'] = produces.join(',');
        }
        let localVarFormParams: any = {};
        let localVarBodyParams: any = undefined;

        // verify required parameter 'brandId' is not null or undefined
        if (brandId === null || brandId === undefined) {
            throw new Error('Required parameter brandId was null or undefined when calling resetDefaultBrand.');
        }

        if (brandId !== undefined) {
            localVarQueryParameters['brandId'] = ObjectSerializer.serialize(brandId, "string");
        }

        (<any>Object).assign(localVarHeaderParams, options.headers);

        let localVarUseFormData = false;

        let data = {};
        if (localVarUseFormData) {
          const formData = toFormData(localVarFormParams);
          data = formData;
          localVarHeaderParams = {
            ...localVarHeaderParams,
            ...formData.getHeaders(),
          };
        }

        let localVarRequestOptions: AxiosRequestConfig = {
            method: 'POST',
            params: localVarQueryParameters,
            headers: localVarHeaderParams,
            url: localVarPath,
            paramsSerializer: this._useQuerystring ? queryParamsSerializer : undefined,
            maxContentLength: Infinity,
            maxBodyLength: Infinity,
            responseType: "json",
        };

        if (localVarRequestOptions.method !== 'GET') {
           localVarRequestOptions.data = data;
        }
        let authenticationPromise = Promise.resolve();

        if (this.authentications["X-API-KEY"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["X-API-KEY"].applyToRequest(localVarRequestOptions));
        }
        if (this.authentications["Bearer"].apiKey) {
            authenticationPromise = authenticationPromise.then(() => this.authentications["Bearer"].applyToRequest(localVarRequestOptions));
        }
        authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions));

        let interceptorPromise = authenticationPromise;
        for (const interceptor of this.interceptors) {
            interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions));
        }

        return interceptorPromise.then(() => {
            return new Promise<BrandingMessage>((resolve, reject) => {
                axios.request(localVarRequestOptions)
                    .then((response) => {
                        handleSuccessfulResponse<BrandingMessage>(
                          resolve,
                          reject,
                          response,
                          "BrandingMessage",
                        );
                    }, (error: AxiosError) => {
                        if (error.response == null) {
                            reject(error);
                            return;
                        }

                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            200,
                            "BrandingMessage",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            401,
                            "ErrorResult",
                        )) {
                          return;
                        }
                        if (handleErrorCodeResponse(
                            reject,
                            error.response,
                            403,
                            "ErrorResult",
                        )) {
                          return;
                        }


                        reject(error);
                    });
            });
        });
    }
}

function deserializeIfNeeded<T> (obj: T, classname: string): T {
  if (obj !== null && obj !== undefined && obj.constructor.name !== classname) {
    return ObjectSerializer.deserialize(obj, classname);
  }

  return obj;
}

type AxiosResolve<T> = (
  value: (T | PromiseLike<T>),
) => void

type AxiosReject = (reason?: any) => void;

function handleSuccessfulResponse<T>(
  resolve: AxiosResolve<T>,
  reject: AxiosReject,
  response: AxiosResponse,
  returnType?: string,
) {
    let body = response.data;

    if (
        response.status &&
        response.status >= 200 &&
        response.status <= 299
    ) {
        if (returnType) {
            body = ObjectSerializer.deserialize(body, returnType);
        }

        resolve(body);
    } else {
        reject(new HttpError(response, body, response.status));
    }
}

function handleErrorCodeResponse(
  reject: AxiosReject,
  response: AxiosResponse,
  code: number,
  returnType: string
): boolean {
    if (response.status !== code) {
        return false;
    }

    let body = response.data;
    if(code === 401) {
        body = "Unauthorized request (401): Invalid authentication.";
    }
    reject(new HttpError(response, body, response.status));

    return true;
}

function handleErrorRangeResponse(
  reject: AxiosReject,
  response: AxiosResponse,
  code: string,
  returnType: string
): boolean {
    let rangeCodeLeft = Number(code[0] + "00");
    let rangeCodeRight = Number(code[0] + "99");

    if (response.status >= rangeCodeLeft && response.status <= rangeCodeRight) {
        const body = ObjectSerializer.deserialize(
            response.data,
            returnType,
        );

      reject(new HttpError(response, body, response.status));

      return true;
    }

    return false;
}
