/* tslint:disable */
/* eslint-disable */
/**
 * Indexea OpenAPI
 * 这是 Indexea 搜索服务平台的 OpenAPI，用于描述平台的所有接口信息，你可以通过这个页面来了解和在线验证平台的所有接口信息。  ### Errors  本 API 使用标准的 HTTP 状态码来指示操作成功或者失败，如果失败将会在 body 中以 JSON 格式提供详细的错误信息，如下所示：  ``` {   \"error\": 404,   \"message\": \"page not found\" } ``` 
 *
 * The version of the OpenAPI document: 1.0.0
 * Contact: indexea.com@gmail.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 * as runtime from '../runtime';
import type {
  ValueOfField,
} from '../models';
import {
    ValueOfFieldFromJSON,
    ValueOfFieldToJSON,
} from '../models';

export interface IndexFieldsRequest {
    app: string;
    index: number;
}

export interface IndexUpdateFieldsRequest {
    app: string;
    index: number;
    body: object;
}

export interface IndexUpdateHtmlStripFieldsRequest {
    app: string;
    index: number;
    body: object;
}

export interface IndexValuesOfFieldRequest {
    app: string;
    index: number;
    field: string;
    size: number;
}

/**
 * 
 */
export class FieldsApi extends runtime.BaseAPI {

    /**
     * 获取索引字段映射详情
     */
    async indexFieldsRaw(requestParameters: IndexFieldsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling indexFields.');
        }

        if (requestParameters.index === null || requestParameters.index === undefined) {
            throw new runtime.RequiredError('index','Required parameter requestParameters.index was null or undefined when calling indexFields.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/indices/{app}/{index}/fields`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 获取索引字段映射详情
     */
    async indexFields(requestParameters: IndexFieldsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.indexFieldsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 更新索引的字段映射
     */
    async indexUpdateFieldsRaw(requestParameters: IndexUpdateFieldsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling indexUpdateFields.');
        }

        if (requestParameters.index === null || requestParameters.index === undefined) {
            throw new runtime.RequiredError('index','Required parameter requestParameters.index was null or undefined when calling indexUpdateFields.');
        }

        if (requestParameters.body === null || requestParameters.body === undefined) {
            throw new runtime.RequiredError('body','Required parameter requestParameters.body was null or undefined when calling indexUpdateFields.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

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

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/indices/{app}/{index}/fields`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: requestParameters.body as any,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 更新索引的字段映射
     */
    async indexUpdateFields(requestParameters: IndexUpdateFieldsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.indexUpdateFieldsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 更新索引的HTML过滤字段列表
     */
    async indexUpdateHtmlStripFieldsRaw(requestParameters: IndexUpdateHtmlStripFieldsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling indexUpdateHtmlStripFields.');
        }

        if (requestParameters.index === null || requestParameters.index === undefined) {
            throw new runtime.RequiredError('index','Required parameter requestParameters.index was null or undefined when calling indexUpdateHtmlStripFields.');
        }

        if (requestParameters.body === null || requestParameters.body === undefined) {
            throw new runtime.RequiredError('body','Required parameter requestParameters.body was null or undefined when calling indexUpdateHtmlStripFields.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

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

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/indices/{app}/{index}/fields`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
            method: 'PATCH',
            headers: headerParameters,
            query: queryParameters,
            body: requestParameters.body as any,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 更新索引的HTML过滤字段列表
     */
    async indexUpdateHtmlStripFields(requestParameters: IndexUpdateHtmlStripFieldsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.indexUpdateHtmlStripFieldsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取索引字段的所有值列表
     */
    async indexValuesOfFieldRaw(requestParameters: IndexValuesOfFieldRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<ValueOfField>>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling indexValuesOfField.');
        }

        if (requestParameters.index === null || requestParameters.index === undefined) {
            throw new runtime.RequiredError('index','Required parameter requestParameters.index was null or undefined when calling indexValuesOfField.');
        }

        if (requestParameters.field === null || requestParameters.field === undefined) {
            throw new runtime.RequiredError('field','Required parameter requestParameters.field was null or undefined when calling indexValuesOfField.');
        }

        if (requestParameters.size === null || requestParameters.size === undefined) {
            throw new runtime.RequiredError('size','Required parameter requestParameters.size was null or undefined when calling indexValuesOfField.');
        }

        const queryParameters: any = {};

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/indices/{app}/{index}/fields/{field}`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"field"}}`, encodeURIComponent(String(requestParameters.field))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(ValueOfFieldFromJSON));
    }

    /**
     * 获取索引字段的所有值列表
     */
    async indexValuesOfField(requestParameters: IndexValuesOfFieldRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<ValueOfField>> {
        const response = await this.indexValuesOfFieldRaw(requestParameters, initOverrides);
        return await response.value();
    }

}
