/* 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';

export interface StatsRecommsRequest {
    app: string;
    recomm?: number;
    startDate?: Date;
    endDate?: Date;
    interval?: StatsRecommsIntervalEnum;
}

export interface StatsSearchsRequest {
    app: string;
    index?: number;
    query?: number;
    widget?: number;
    keywordsWithClicks?: boolean;
    startDate?: Date;
    endDate?: Date;
    interval?: StatsSearchsIntervalEnum;
}

export interface StatsTopClicksRequest {
    app: string;
    size: number;
    index?: number;
    query?: number;
    recomm?: number;
    widget?: number;
    startDate?: Date;
    endDate?: Date;
    field?: Array<string>;
}

export interface StatsWidgetsRequest {
    app: string;
    widget?: number;
    startDate?: Date;
    endDate?: Date;
    interval?: StatsWidgetsIntervalEnum;
}

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

    /**
     * 获取推荐日志的汇总信息
     */
    async statsRecommsRaw(requestParameters: StatsRecommsRequest, 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 statsRecomms.');
        }

        const queryParameters: any = {};

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

        if (requestParameters.startDate !== undefined) {
            queryParameters['start_date'] = (requestParameters.startDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.endDate !== undefined) {
            queryParameters['end_date'] = (requestParameters.endDate as any).toISOString().substr(0,10);
        }

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

        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: `/stats/{app}/recomms`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * 获取推荐日志的汇总信息
     */
    async statsRecomms(requestParameters: StatsRecommsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.statsRecommsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取搜索日志的汇总信息
     */
    async statsSearchsRaw(requestParameters: StatsSearchsRequest, 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 statsSearchs.');
        }

        const queryParameters: any = {};

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

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

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

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

        if (requestParameters.startDate !== undefined) {
            queryParameters['start_date'] = (requestParameters.startDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.endDate !== undefined) {
            queryParameters['end_date'] = (requestParameters.endDate as any).toISOString().substr(0,10);
        }

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

        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: `/stats/{app}/searchs`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * 获取搜索日志的汇总信息
     */
    async statsSearchs(requestParameters: StatsSearchsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.statsSearchsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取点击排行榜
     */
    async statsTopClicksRaw(requestParameters: StatsTopClicksRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<object>>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling statsTopClicks.');
        }

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

        const queryParameters: any = {};

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

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

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

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

        if (requestParameters.startDate !== undefined) {
            queryParameters['start_date'] = (requestParameters.startDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.endDate !== undefined) {
            queryParameters['end_date'] = (requestParameters.endDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.field) {
            queryParameters['field'] = requestParameters.field;
        }

        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: `/stats/{app}/top-clicks`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * 获取点击排行榜
     */
    async statsTopClicks(requestParameters: StatsTopClicksRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<object>> {
        const response = await this.statsTopClicksRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取模板与组件的统计信息
     */
    async statsWidgetsRaw(requestParameters: StatsWidgetsRequest, 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 statsWidgets.');
        }

        const queryParameters: any = {};

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

        if (requestParameters.startDate !== undefined) {
            queryParameters['start_date'] = (requestParameters.startDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.endDate !== undefined) {
            queryParameters['end_date'] = (requestParameters.endDate as any).toISOString().substr(0,10);
        }

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

        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: `/stats/{app}/widgets`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * 获取模板与组件的统计信息
     */
    async statsWidgets(requestParameters: StatsWidgetsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.statsWidgetsRaw(requestParameters, initOverrides);
        return await response.value();
    }

}

/**
 * @export
 */
export const StatsRecommsIntervalEnum = {
    Date: 'date',
    Week: 'week',
    Month: 'month',
    Quarter: 'quarter',
    Year: 'year'
} as const;
export type StatsRecommsIntervalEnum = typeof StatsRecommsIntervalEnum[keyof typeof StatsRecommsIntervalEnum];
/**
 * @export
 */
export const StatsSearchsIntervalEnum = {
    Date: 'date',
    Week: 'week',
    Month: 'month',
    Quarter: 'quarter',
    Year: 'year'
} as const;
export type StatsSearchsIntervalEnum = typeof StatsSearchsIntervalEnum[keyof typeof StatsSearchsIntervalEnum];
/**
 * @export
 */
export const StatsWidgetsIntervalEnum = {
    Date: 'date',
    Week: 'week',
    Month: 'month',
    Quarter: 'quarter',
    Year: 'year'
} as const;
export type StatsWidgetsIntervalEnum = typeof StatsWidgetsIntervalEnum[keyof typeof StatsWidgetsIntervalEnum];
