/* tslint:disable */
/* eslint-disable */
/**
 * Elastic Email REST API
 * This API is based on the REST API architecture, allowing the user to easily manage their data with this resource-based approach.    Every API call is established on which specific request type (GET, POST, PUT, DELETE) will be used.    The API has a limit of 20 concurrent connections and a hard timeout of 600 seconds per request.    To start using this API, you will need your Access Token (available <a target=\"_blank\" href=\"https://app.elasticemail.com/marketing/settings/new/manage-api\">here</a>). Remember to keep it safe. Required access levels are listed in the given request’s description.    Downloadable library clients can be found in our Github repository <a target=\"_blank\" href=\"https://github.com/ElasticEmail?tab=repositories&q=%22rest+api%22+in%3Areadme\">here</a>
 *
 * The version of the OpenAPI document: 4.0.0
 * Contact: support@elasticemail.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import type { Configuration } from '../configuration';
import type { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
import globalAxios from 'axios';
// Some imports not used depending on template conditions
// @ts-ignore
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
// @ts-ignore
import { Campaign } from '../ee-api-models';
/**
 * CampaignsApi - axios parameter creator
 * @export
 */
export const CampaignsApiAxiosParamCreator = function (configuration?: Configuration) {
    return {
        /**
         * Delete the specific campaign.  This does not cancel in progress email, see Cancel In Progress. Required Access Level: ModifyCampaigns
         * @summary Delete Campaign
         * @param {string} name Name of Campaign to delete
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsByNameDelete: async (name: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'name' is not null or undefined
            assertParamExists('campaignsByNameDelete', 'name', name)
            const localVarPath = `/campaigns/{name}`
                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication apikey required
            await setApiKeyToObject(localVarHeaderParameter, "X-ElasticEmail-ApiKey", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Returns the specified campaign details. Required Access Level: ViewCampaigns
         * @summary Load Campaign
         * @param {string} name Name of Campaign to get
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsByNameGet: async (name: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'name' is not null or undefined
            assertParamExists('campaignsByNameGet', 'name', name)
            const localVarPath = `/campaigns/{name}`
                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication apikey required
            await setApiKeyToObject(localVarHeaderParameter, "X-ElasticEmail-ApiKey", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Updates a previously added campaign.  Only Active and Paused campaigns can be updated. Required Access Level: ModifyCampaigns
         * @summary Update Campaign
         * @param {string} name Name of Campaign to update
         * @param {Campaign} campaign JSON representation of a campaign
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsByNamePut: async (name: string, campaign: Campaign, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'name' is not null or undefined
            assertParamExists('campaignsByNamePut', 'name', name)
            // verify required parameter 'campaign' is not null or undefined
            assertParamExists('campaignsByNamePut', 'campaign', campaign)
            const localVarPath = `/campaigns/{name}`
                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication apikey required
            await setApiKeyToObject(localVarHeaderParameter, "X-ElasticEmail-ApiKey", configuration)


    
            localVarHeaderParameter['Content-Type'] = 'application/json';

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(campaign, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Returns a list all of your campaigns. Limited to 1000 results. Required Access Level: ViewCampaigns
         * @summary Load Campaigns
         * @param {string} [search] Text fragment used for searching in Campaign name (using the \&#39;contains\&#39; rule)
         * @param {number} [offset] How many items should be returned ahead.
         * @param {number} [limit] Maximum number of returned items.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsGet: async (search?: string, offset?: number, limit?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
            const localVarPath = `/campaigns`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication apikey required
            await setApiKeyToObject(localVarHeaderParameter, "X-ElasticEmail-ApiKey", configuration)

            if (search !== undefined) {
                localVarQueryParameter['search'] = search;
            }

            if (offset !== undefined) {
                localVarQueryParameter['offset'] = offset;
            }

            if (limit !== undefined) {
                localVarQueryParameter['limit'] = limit;
            }


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Add a campaign for processing. Required Access Level: ModifyCampaigns
         * @summary Add Campaign
         * @param {Campaign} campaign JSON representation of a campaign
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsPost: async (campaign: Campaign, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'campaign' is not null or undefined
            assertParamExists('campaignsPost', 'campaign', campaign)
            const localVarPath = `/campaigns`;
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication apikey required
            await setApiKeyToObject(localVarHeaderParameter, "X-ElasticEmail-ApiKey", configuration)


    
            localVarHeaderParameter['Content-Type'] = 'application/json';

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(campaign, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
    }
};

/**
 * CampaignsApi - functional programming interface
 * @export
 */
export const CampaignsApiFp = function(configuration?: Configuration) {
    const localVarAxiosParamCreator = CampaignsApiAxiosParamCreator(configuration)
    return {
        /**
         * Delete the specific campaign.  This does not cancel in progress email, see Cancel In Progress. Required Access Level: ModifyCampaigns
         * @summary Delete Campaign
         * @param {string} name Name of Campaign to delete
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async campaignsByNameDelete(name: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.campaignsByNameDelete(name, options);
            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
        },
        /**
         * Returns the specified campaign details. Required Access Level: ViewCampaigns
         * @summary Load Campaign
         * @param {string} name Name of Campaign to get
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async campaignsByNameGet(name: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Campaign>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.campaignsByNameGet(name, options);
            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
        },
        /**
         * Updates a previously added campaign.  Only Active and Paused campaigns can be updated. Required Access Level: ModifyCampaigns
         * @summary Update Campaign
         * @param {string} name Name of Campaign to update
         * @param {Campaign} campaign JSON representation of a campaign
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async campaignsByNamePut(name: string, campaign: Campaign, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Campaign>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.campaignsByNamePut(name, campaign, options);
            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
        },
        /**
         * Returns a list all of your campaigns. Limited to 1000 results. Required Access Level: ViewCampaigns
         * @summary Load Campaigns
         * @param {string} [search] Text fragment used for searching in Campaign name (using the \&#39;contains\&#39; rule)
         * @param {number} [offset] How many items should be returned ahead.
         * @param {number} [limit] Maximum number of returned items.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async campaignsGet(search?: string, offset?: number, limit?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<Campaign>>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.campaignsGet(search, offset, limit, options);
            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
        },
        /**
         * Add a campaign for processing. Required Access Level: ModifyCampaigns
         * @summary Add Campaign
         * @param {Campaign} campaign JSON representation of a campaign
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async campaignsPost(campaign: Campaign, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Campaign>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.campaignsPost(campaign, options);
            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
        },
    }
};

/**
 * CampaignsApi - factory interface
 * @export
 */
export const CampaignsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
    const localVarFp = CampaignsApiFp(configuration)
    return {
        /**
         * Delete the specific campaign.  This does not cancel in progress email, see Cancel In Progress. Required Access Level: ModifyCampaigns
         * @summary Delete Campaign
         * @param {string} name Name of Campaign to delete
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsByNameDelete(name: string, options?: any): AxiosPromise<void> {
            return localVarFp.campaignsByNameDelete(name, options).then((request) => request(axios, basePath));
        },
        /**
         * Returns the specified campaign details. Required Access Level: ViewCampaigns
         * @summary Load Campaign
         * @param {string} name Name of Campaign to get
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsByNameGet(name: string, options?: any): AxiosPromise<Campaign> {
            return localVarFp.campaignsByNameGet(name, options).then((request) => request(axios, basePath));
        },
        /**
         * Updates a previously added campaign.  Only Active and Paused campaigns can be updated. Required Access Level: ModifyCampaigns
         * @summary Update Campaign
         * @param {string} name Name of Campaign to update
         * @param {Campaign} campaign JSON representation of a campaign
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsByNamePut(name: string, campaign: Campaign, options?: any): AxiosPromise<Campaign> {
            return localVarFp.campaignsByNamePut(name, campaign, options).then((request) => request(axios, basePath));
        },
        /**
         * Returns a list all of your campaigns. Limited to 1000 results. Required Access Level: ViewCampaigns
         * @summary Load Campaigns
         * @param {string} [search] Text fragment used for searching in Campaign name (using the \&#39;contains\&#39; rule)
         * @param {number} [offset] How many items should be returned ahead.
         * @param {number} [limit] Maximum number of returned items.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsGet(search?: string, offset?: number, limit?: number, options?: any): AxiosPromise<Array<Campaign>> {
            return localVarFp.campaignsGet(search, offset, limit, options).then((request) => request(axios, basePath));
        },
        /**
         * Add a campaign for processing. Required Access Level: ModifyCampaigns
         * @summary Add Campaign
         * @param {Campaign} campaign JSON representation of a campaign
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        campaignsPost(campaign: Campaign, options?: any): AxiosPromise<Campaign> {
            return localVarFp.campaignsPost(campaign, options).then((request) => request(axios, basePath));
        },
    };
};

/**
 * CampaignsApi - interface
 * @export
 * @interface CampaignsApi
 */
export interface CampaignsApiInterface {
    /**
     * Delete the specific campaign.  This does not cancel in progress email, see Cancel In Progress. Required Access Level: ModifyCampaigns
     * @summary Delete Campaign
     * @param {string} name Name of Campaign to delete
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApiInterface
     */
    campaignsByNameDelete(name: string, options?: AxiosRequestConfig): AxiosPromise<void>;

    /**
     * Returns the specified campaign details. Required Access Level: ViewCampaigns
     * @summary Load Campaign
     * @param {string} name Name of Campaign to get
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApiInterface
     */
    campaignsByNameGet(name: string, options?: AxiosRequestConfig): AxiosPromise<Campaign>;

    /**
     * Updates a previously added campaign.  Only Active and Paused campaigns can be updated. Required Access Level: ModifyCampaigns
     * @summary Update Campaign
     * @param {string} name Name of Campaign to update
     * @param {Campaign} campaign JSON representation of a campaign
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApiInterface
     */
    campaignsByNamePut(name: string, campaign: Campaign, options?: AxiosRequestConfig): AxiosPromise<Campaign>;

    /**
     * Returns a list all of your campaigns. Limited to 1000 results. Required Access Level: ViewCampaigns
     * @summary Load Campaigns
     * @param {string} [search] Text fragment used for searching in Campaign name (using the \&#39;contains\&#39; rule)
     * @param {number} [offset] How many items should be returned ahead.
     * @param {number} [limit] Maximum number of returned items.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApiInterface
     */
    campaignsGet(search?: string, offset?: number, limit?: number, options?: AxiosRequestConfig): AxiosPromise<Array<Campaign>>;

    /**
     * Add a campaign for processing. Required Access Level: ModifyCampaigns
     * @summary Add Campaign
     * @param {Campaign} campaign JSON representation of a campaign
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApiInterface
     */
    campaignsPost(campaign: Campaign, options?: AxiosRequestConfig): AxiosPromise<Campaign>;

}

/**
 * CampaignsApi - object-oriented interface
 * @export
 * @class CampaignsApi
 * @extends {BaseAPI}
 */
export class CampaignsApi extends BaseAPI implements CampaignsApiInterface {
    /**
     * Delete the specific campaign.  This does not cancel in progress email, see Cancel In Progress. Required Access Level: ModifyCampaigns
     * @summary Delete Campaign
     * @param {string} name Name of Campaign to delete
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApi
     */
    public campaignsByNameDelete(name: string, options?: AxiosRequestConfig) {
        return CampaignsApiFp(this.configuration).campaignsByNameDelete(name, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Returns the specified campaign details. Required Access Level: ViewCampaigns
     * @summary Load Campaign
     * @param {string} name Name of Campaign to get
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApi
     */
    public campaignsByNameGet(name: string, options?: AxiosRequestConfig) {
        return CampaignsApiFp(this.configuration).campaignsByNameGet(name, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Updates a previously added campaign.  Only Active and Paused campaigns can be updated. Required Access Level: ModifyCampaigns
     * @summary Update Campaign
     * @param {string} name Name of Campaign to update
     * @param {Campaign} campaign JSON representation of a campaign
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApi
     */
    public campaignsByNamePut(name: string, campaign: Campaign, options?: AxiosRequestConfig) {
        return CampaignsApiFp(this.configuration).campaignsByNamePut(name, campaign, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Returns a list all of your campaigns. Limited to 1000 results. Required Access Level: ViewCampaigns
     * @summary Load Campaigns
     * @param {string} [search] Text fragment used for searching in Campaign name (using the \&#39;contains\&#39; rule)
     * @param {number} [offset] How many items should be returned ahead.
     * @param {number} [limit] Maximum number of returned items.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApi
     */
    public campaignsGet(search?: string, offset?: number, limit?: number, options?: AxiosRequestConfig) {
        return CampaignsApiFp(this.configuration).campaignsGet(search, offset, limit, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Add a campaign for processing. Required Access Level: ModifyCampaigns
     * @summary Add Campaign
     * @param {Campaign} campaign JSON representation of a campaign
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof CampaignsApi
     */
    public campaignsPost(campaign: Campaign, options?: AxiosRequestConfig) {
        return CampaignsApiFp(this.configuration).campaignsPost(campaign, options).then((request) => request(this.axios, this.basePath));
    }
}
