/* 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 {
  Message,
  Messages,
} from '../models';
import {
    MessageFromJSON,
    MessageToJSON,
    MessagesFromJSON,
    MessagesToJSON,
} from '../models';

export interface MessageDeleteRequest {
    id: number;
}

export interface MessageFeedbackRequest {
    content: string;
    type: MessageFeedbackTypeEnum;
}

export interface MessageListRequest {
    scope: MessageListScopeEnum;
    from?: number;
    size?: number;
}

export interface MessageReadRequest {
    id: string;
}

export interface MessageSendRequest {
    receiver: number;
    msg: string;
}

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

    /**
     * 删除消息
     * 删除消息
     */
    async messageDeleteRaw(requestParameters: MessageDeleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.id === null || requestParameters.id === undefined) {
            throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling messageDelete.');
        }

        const queryParameters: any = {};

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

        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: `/accounts/message`,
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 删除消息
     * 删除消息
     */
    async messageDelete(requestParameters: MessageDeleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.messageDeleteRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 反馈意见
     */
    async messageFeedbackRaw(requestParameters: MessageFeedbackRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.content === null || requestParameters.content === undefined) {
            throw new runtime.RequiredError('content','Required parameter requestParameters.content was null or undefined when calling messageFeedback.');
        }

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

        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 consumes: runtime.Consume[] = [
            { contentType: 'application/x-www-form-urlencoded' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters.content !== undefined) {
            formParams.append('content', requestParameters.content as any);
        }

        if (requestParameters.type !== undefined) {
            formParams.append('type', requestParameters.type as any);
        }

        const response = await this.request({
            path: `/accounts/feedback`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 反馈意见
     */
    async messageFeedback(requestParameters: MessageFeedbackRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.messageFeedbackRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取我相关的消息信息，包括未读消息数量、最新消息等
     */
    async messageListRaw(requestParameters: MessageListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Messages>> {
        if (requestParameters.scope === null || requestParameters.scope === undefined) {
            throw new runtime.RequiredError('scope','Required parameter requestParameters.scope was null or undefined when calling messageList.');
        }

        const queryParameters: any = {};

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

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

        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: `/accounts/message`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * 获取我相关的消息信息，包括未读消息数量、最新消息等
     */
    async messageList(requestParameters: MessageListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Messages> {
        const response = await this.messageListRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 标识消息为已读
     * 标识消息为已读
     */
    async messageReadRaw(requestParameters: MessageReadRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Messages>> {
        if (requestParameters.id === null || requestParameters.id === undefined) {
            throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling messageRead.');
        }

        const queryParameters: any = {};

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

        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: `/accounts/message`,
            method: 'PATCH',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * 标识消息为已读
     * 标识消息为已读
     */
    async messageRead(requestParameters: MessageReadRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Messages> {
        const response = await this.messageReadRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 发送站内消息给某人
     * 发送消息
     */
    async messageSendRaw(requestParameters: MessageSendRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Message>> {
        if (requestParameters.receiver === null || requestParameters.receiver === undefined) {
            throw new runtime.RequiredError('receiver','Required parameter requestParameters.receiver was null or undefined when calling messageSend.');
        }

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

        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 consumes: runtime.Consume[] = [
            { contentType: 'application/x-www-form-urlencoded' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters.receiver !== undefined) {
            formParams.append('receiver', requestParameters.receiver as any);
        }

        if (requestParameters.msg !== undefined) {
            formParams.append('msg', requestParameters.msg as any);
        }

        const response = await this.request({
            path: `/accounts/message`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

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

    /**
     * 发送站内消息给某人
     * 发送消息
     */
    async messageSend(requestParameters: MessageSendRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Message> {
        const response = await this.messageSendRaw(requestParameters, initOverrides);
        return await response.value();
    }

}

/**
 * @export
 */
export const MessageFeedbackTypeEnum = {
    General: 'general',
    Bugs: 'bugs',
    Feature: 'feature'
} as const;
export type MessageFeedbackTypeEnum = typeof MessageFeedbackTypeEnum[keyof typeof MessageFeedbackTypeEnum];
/**
 * @export
 */
export const MessageListScopeEnum = {
    All: 'all',
    Unread: 'unread',
    Read: 'read'
} as const;
export type MessageListScopeEnum = typeof MessageListScopeEnum[keyof typeof MessageListScopeEnum];
