/* eslint-disable */ // @ts-nocheck
/**
 * Search
 * Search service
 *
 * The version of the OpenAPI document: 1.3-SNAPSHOT (45)
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as globalImportUrl from 'url';
import { Configuration } from './configuration';
import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from './base';

/**
 *
 * @export
 * @interface GroupRule
 */
export interface GroupRule {
    /**
     *
     * @type {LogLevel}
     * @memberof GroupRule
     */
    custom: LogLevel;
    /**
     *
     * @type {LogLevel}
     * @memberof GroupRule
     */
    root: LogLevel;
}
/**
 *
 * @export
 * @enum {string}
 */
export enum LogLevel {
    ALL = 'ALL',
    TRACE = 'TRACE',
    DEBUG = 'DEBUG',
    INFO = 'INFO',
    WARN = 'WARN',
    ERROR = 'ERROR',
    False = 'false'
}

/**
 *
 * @export
 * @interface Rule
 */
export interface Rule {
    /**
     *
     * @type {string}
     * @memberof Rule
     */
    logger: string;
    /**
     *
     * @type {LogLevel}
     * @memberof Rule
     */
    level: LogLevel;
}
/**
 * Найденый обьект
 * @export
 * @interface SearchHit
 */
export interface SearchHit {
    /**
     * Код типа кодумента найденого обьекта
     * @type {string}
     * @memberof SearchHit
     */
    docTypeCode?: string;
    /**
     * Данные найденного обьекта
     * @type {{ [key: string]: object; }}
     * @memberof SearchHit
     */
    data?: { [key: string]: object; };
}
/**
 * Коллекция с результатами поиска
 * @export
 * @interface SearchResult
 */
export interface SearchResult {
    /**
     *
     * @type {Array<SearchHit>}
     * @memberof SearchResult
     */
    results?: Array<SearchHit>;
}

/**
 * DefaultApi - axios parameter creator
 * @export
 */
export const DefaultApiAxiosParamCreator = function (configuration?: Configuration) {
    return {
        /**
         * Возвращает результат поиска в эластике
         * @summary Выполняет поиск в эластике
         * @param {string} docTypeCodes коды типов документа
         * @param {{ [key: string]: object; }} requestBody поисковый запрос elastic
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        schemaPaging: async (docTypeCodes: string, requestBody: { [key: string]: object; }, options: any = {}): Promise<RequestArgs> => {
            // verify required parameter 'docTypeCodes' is not null or undefined
            if (docTypeCodes === null || docTypeCodes === undefined) {
                throw new RequiredError('docTypeCodes','Required parameter docTypeCodes was null or undefined when calling schemaPaging.');
            }
            // verify required parameter 'requestBody' is not null or undefined
            if (requestBody === null || requestBody === undefined) {
                throw new RequiredError('requestBody','Required parameter requestBody was null or undefined when calling schemaPaging.');
            }
            const localVarPath = `/search/{docTypeCodes}`
                .replace(`{${"docTypeCodes"}}`, encodeURIComponent(String(docTypeCodes)));
            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }
            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;



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

            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
            delete localVarUrlObj.search;
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            const needsSerialization = (typeof requestBody !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(requestBody !== undefined ? requestBody : {}) : (requestBody || "");

            return {
                url: globalImportUrl.format(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
    }
};

/**
 * DefaultApi - functional programming interface
 * @export
 */
export const DefaultApiFp = function(configuration?: Configuration) {
    return {
        /**
         * Возвращает результат поиска в эластике
         * @summary Выполняет поиск в эластике
         * @param {string} docTypeCodes коды типов документа
         * @param {{ [key: string]: object; }} requestBody поисковый запрос elastic
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async schemaPaging(docTypeCodes: string, requestBody: { [key: string]: object; }, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SearchResult>> {
            const localVarAxiosArgs = await DefaultApiAxiosParamCreator(configuration).schemaPaging(docTypeCodes, requestBody, options);
            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                return axios.request(axiosRequestArgs);
            };
        },
    }
};

/**
 * DefaultApi - factory interface
 * @export
 */
export const DefaultApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
    return {
        /**
         * Возвращает результат поиска в эластике
         * @summary Выполняет поиск в эластике
         * @param {string} docTypeCodes коды типов документа
         * @param {{ [key: string]: object; }} requestBody поисковый запрос elastic
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        schemaPaging(docTypeCodes: string, requestBody: { [key: string]: object; }, options?: any): AxiosPromise<SearchResult> {
            return DefaultApiFp(configuration).schemaPaging(docTypeCodes, requestBody, options).then((request) => request(axios, basePath));
        },
    };
};

/**
 * DefaultApi - object-oriented interface
 * @export
 * @class DefaultApi
 * @extends {BaseAPI}
 */
export class DefaultApi extends BaseAPI {
    /**
     * Возвращает результат поиска в эластике
     * @summary Выполняет поиск в эластике
     * @param {string} docTypeCodes коды типов документа
     * @param {{ [key: string]: object; }} requestBody поисковый запрос elastic
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof DefaultApi
     */
    public schemaPaging(docTypeCodes: string, requestBody: { [key: string]: object; }, options?: any) {
        return DefaultApiFp(this.configuration).schemaPaging(docTypeCodes, requestBody, options).then((request) => request(this.axios, this.basePath));
    }

}


/**
 * LoggingApi - axios parameter creator
 * @export
 */
export const LoggingApiAxiosParamCreator = function (configuration?: Configuration) {
    return {
        /**
         * Возвращает Swagger файл в формате YAML описывающий Rest API в формате Swagger (OpenAPI 3.0.1)
         * @summary Возвращает Swagger/OpenAPI файл
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getApi: async (options: any = {}): Promise<RequestArgs> => {
            const localVarPath = `/api`;
            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }
            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;



            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
            delete localVarUrlObj.search;
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: globalImportUrl.format(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Возвращает список правил логгирования сервиса для пакетов и классов
         * @summary Возвращает правила логгирования
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getRules: async (options: any = {}): Promise<RequestArgs> => {
            const localVarPath = `/logging`;
            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }
            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;



            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
            delete localVarUrlObj.search;
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: globalImportUrl.format(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Устанавливает логирования для ROOT и всех установленных классов/пакетов, согласно настроек конфигурационного файла
         * @summary Сбросить и установить уровни логирования по умочанию
         * @param {string} body
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        reset: async (body: string, options: any = {}): Promise<RequestArgs> => {
            // verify required parameter 'body' is not null or undefined
            if (body === null || body === undefined) {
                throw new RequiredError('body','Required parameter body was null or undefined when calling reset.');
            }
            const localVarPath = `/logging/reset`;
            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }
            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;



            localVarHeaderParameter['Content-Type'] = 'text/plain';

            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
            delete localVarUrlObj.search;
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");

            return {
                url: globalImportUrl.format(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Применяет груповое правило логгирования сервиса для ROOT и всех установленных классов/пакетов
         * @summary Применяет груповое правило логгирования
         * @param {GroupRule} groupRule
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        setGroupRule: async (groupRule: GroupRule, options: any = {}): Promise<RequestArgs> => {
            // verify required parameter 'groupRule' is not null or undefined
            if (groupRule === null || groupRule === undefined) {
                throw new RequiredError('groupRule','Required parameter groupRule was null or undefined when calling setGroupRule.');
            }
            const localVarPath = `/logging/group`;
            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }
            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;



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

            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
            delete localVarUrlObj.search;
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            const needsSerialization = (typeof groupRule !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(groupRule !== undefined ? groupRule : {}) : (groupRule || "");

            return {
                url: globalImportUrl.format(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Применяет правила логгирования сервиса для пакетов и классов
         * @summary Применяет правила логгирования
         * @param {Array<Rule>} rule
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        setRules: async (rule: Array<Rule>, options: any = {}): Promise<RequestArgs> => {
            // verify required parameter 'rule' is not null or undefined
            if (rule === null || rule === undefined) {
                throw new RequiredError('rule','Required parameter rule was null or undefined when calling setRules.');
            }
            const localVarPath = `/logging`;
            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }
            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;



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

            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
            delete localVarUrlObj.search;
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            const needsSerialization = (typeof rule !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(rule !== undefined ? rule : {}) : (rule || "");

            return {
                url: globalImportUrl.format(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
    }
};

/**
 * LoggingApi - functional programming interface
 * @export
 */
export const LoggingApiFp = function(configuration?: Configuration) {
    return {
        /**
         * Возвращает Swagger файл в формате YAML описывающий Rest API в формате Swagger (OpenAPI 3.0.1)
         * @summary Возвращает Swagger/OpenAPI файл
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async getApi(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await LoggingApiAxiosParamCreator(configuration).getApi(options);
            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                return axios.request(axiosRequestArgs);
            };
        },
        /**
         * Возвращает список правил логгирования сервиса для пакетов и классов
         * @summary Возвращает правила логгирования
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async getRules(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Rule>> {
            const localVarAxiosArgs = await LoggingApiAxiosParamCreator(configuration).getRules(options);
            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                return axios.request(axiosRequestArgs);
            };
        },
        /**
         * Устанавливает логирования для ROOT и всех установленных классов/пакетов, согласно настроек конфигурационного файла
         * @summary Сбросить и установить уровни логирования по умочанию
         * @param {string} body
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async reset(body: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<object>> {
            const localVarAxiosArgs = await LoggingApiAxiosParamCreator(configuration).reset(body, options);
            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                return axios.request(axiosRequestArgs);
            };
        },
        /**
         * Применяет груповое правило логгирования сервиса для ROOT и всех установленных классов/пакетов
         * @summary Применяет груповое правило логгирования
         * @param {GroupRule} groupRule
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async setGroupRule(groupRule: GroupRule, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<object>> {
            const localVarAxiosArgs = await LoggingApiAxiosParamCreator(configuration).setGroupRule(groupRule, options);
            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                return axios.request(axiosRequestArgs);
            };
        },
        /**
         * Применяет правила логгирования сервиса для пакетов и классов
         * @summary Применяет правила логгирования
         * @param {Array<Rule>} rule
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async setRules(rule: Array<Rule>, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<object>> {
            const localVarAxiosArgs = await LoggingApiAxiosParamCreator(configuration).setRules(rule, options);
            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                return axios.request(axiosRequestArgs);
            };
        },
    }
};

/**
 * LoggingApi - factory interface
 * @export
 */
export const LoggingApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
    return {
        /**
         * Возвращает Swagger файл в формате YAML описывающий Rest API в формате Swagger (OpenAPI 3.0.1)
         * @summary Возвращает Swagger/OpenAPI файл
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getApi(options?: any): AxiosPromise<void> {
            return LoggingApiFp(configuration).getApi(options).then((request) => request(axios, basePath));
        },
        /**
         * Возвращает список правил логгирования сервиса для пакетов и классов
         * @summary Возвращает правила логгирования
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        getRules(options?: any): AxiosPromise<Rule> {
            return LoggingApiFp(configuration).getRules(options).then((request) => request(axios, basePath));
        },
        /**
         * Устанавливает логирования для ROOT и всех установленных классов/пакетов, согласно настроек конфигурационного файла
         * @summary Сбросить и установить уровни логирования по умочанию
         * @param {string} body
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        reset(body: string, options?: any): AxiosPromise<object> {
            return LoggingApiFp(configuration).reset(body, options).then((request) => request(axios, basePath));
        },
        /**
         * Применяет груповое правило логгирования сервиса для ROOT и всех установленных классов/пакетов
         * @summary Применяет груповое правило логгирования
         * @param {GroupRule} groupRule
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        setGroupRule(groupRule: GroupRule, options?: any): AxiosPromise<object> {
            return LoggingApiFp(configuration).setGroupRule(groupRule, options).then((request) => request(axios, basePath));
        },
        /**
         * Применяет правила логгирования сервиса для пакетов и классов
         * @summary Применяет правила логгирования
         * @param {Array<Rule>} rule
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        setRules(rule: Array<Rule>, options?: any): AxiosPromise<object> {
            return LoggingApiFp(configuration).setRules(rule, options).then((request) => request(axios, basePath));
        },
    };
};

/**
 * LoggingApi - object-oriented interface
 * @export
 * @class LoggingApi
 * @extends {BaseAPI}
 */
export class LoggingApi extends BaseAPI {
    /**
     * Возвращает Swagger файл в формате YAML описывающий Rest API в формате Swagger (OpenAPI 3.0.1)
     * @summary Возвращает Swagger/OpenAPI файл
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof LoggingApi
     */
    public getApi(options?: any) {
        return LoggingApiFp(this.configuration).getApi(options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Возвращает список правил логгирования сервиса для пакетов и классов
     * @summary Возвращает правила логгирования
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof LoggingApi
     */
    public getRules(options?: any) {
        return LoggingApiFp(this.configuration).getRules(options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Устанавливает логирования для ROOT и всех установленных классов/пакетов, согласно настроек конфигурационного файла
     * @summary Сбросить и установить уровни логирования по умочанию
     * @param {string} body
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof LoggingApi
     */
    public reset(body: string, options?: any) {
        return LoggingApiFp(this.configuration).reset(body, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Применяет груповое правило логгирования сервиса для ROOT и всех установленных классов/пакетов
     * @summary Применяет груповое правило логгирования
     * @param {GroupRule} groupRule
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof LoggingApi
     */
    public setGroupRule(groupRule: GroupRule, options?: any) {
        return LoggingApiFp(this.configuration).setGroupRule(groupRule, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Применяет правила логгирования сервиса для пакетов и классов
     * @summary Применяет правила логгирования
     * @param {Array<Rule>} rule
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof LoggingApi
     */
    public setRules(rule: Array<Rule>, options?: any) {
        return LoggingApiFp(this.configuration).setRules(rule, options).then((request) => request(this.axios, this.basePath));
    }

}


