import { ChatMessageRole, IApplication, IChatMessage, ICommentParam, ISession, ISessionPrompt } from '@glodon-aiot/apis';
import { Socket } from 'socket.io-client';
import EventBus from './EventBus';
import { ActionPayload, PluginFunctionBasic, Thought } from './PayloadTypes';
import { CVForceApi } from '@glodon-aiot/apis';
import { ChatHistoryParams, IKnowledge } from '@glodon-aiot/apis';
import BotClient from './BotClient';
export declare enum NetOpen {
    enable = 1,
    disable = 2
}
export interface QuestionBody {
    content: string;
    stream: boolean;
    requestId?: string;
    fileIds?: string[];
    oldMessageId?: string;
    referenceFirst?: boolean;
}
export interface QuestionConfig {
    stream?: boolean;
    referenceFirst?: boolean;
    formatValues?: any;
    oldMessageId?: string;
}
type ActionPayloadBasic = ActionPayload<PluginFunctionBasic & Thought>;
export type SessionEventName = 'init' | 'ready' | 'activated' | 'inactivated' | 'frozen' | 'data:loading' | 'data:loaded' | 'data:updating' | 'data:updated' | 'data:updated:promptVariables' | 'data:updated:knowledges' | 'data:creating' | 'data:created' | 'data:deleting' | 'data:deleted' | 'socket:connect' | 'socket:disconnect' | 'error' | 'destroy' | 'history:loading' | 'history:loaded' | 'history:moreloading' | 'history:moreloaded' | 'history:add' | 'message:new' | 'message:updated' | 'message:action' | 'message:content' | 'message:reference' | 'message:relatedQuesion:loading' | 'message:relatedQuesion:loaded' | 'message:comment' | 'message:error' | 'answer:finish';
export declare enum SessionErrors {
    DataRequestFailed = "data request error",
    SocketConnectionFailed = "socket error",
    IdUndefined = "session id is not defined",
    SendingEmptyContent = "failed at sending empty content",
    Frozen = "session is frozen",
    UserModeError = "failed at setting socket user mode",
    Inactive = "session is inactive"
}
export declare const SESSION_ERROR_CAUSE: {
    "session id is not defined": {
        code: number;
        message: string;
    };
    "failed at sending empty content": {
        code: number;
        message: string;
    };
    "session is frozen": {
        code: number;
        message: string;
    };
};
export default abstract class Session {
    protected token: string;
    protected lazyload?: boolean | undefined;
    protected _id?: string;
    protected _frozen: boolean;
    protected inactivating: boolean;
    protected _ready: boolean;
    protected event: EventBus;
    _applicationId: string;
    _application: IApplication | null;
    data: ISession | null;
    readonly client: BotClient | null;
    messages: IChatMessage[];
    protected _loadingMessages: boolean;
    protected _loadingMessagesSize: number;
    cvforceApi: CVForceApi;
    socket: Socket | null;
    protected _promptVariables: ISessionPrompt[];
    protected active: boolean;
    protected activing: boolean;
    protected _stopAnswer: boolean;
    private _dataLoading;
    private _dataLoaded;
    /**
     * Session 类的构造函数，用于初始化会话实例。
     * @param token - 用户的身份验证令牌，用于解析应用 ID。
     * @param _id - 会话的 ID，可选参数，默认为空字符串。
     * @param _data - 会话的初始数据，可选参数，包含提示变量、知识库等信息。
     * @param lazyload - 是否懒加载数据，可选参数，默认为 undefined。
     * @param _application - 应用信息，可选参数。
     * @param client - Bot 客户端实例，可选参数。
     */
    constructor(token: string, _id?: string, _data?: Partial<ISession & {
        promptVariables?: Partial<ISessionPrompt>[];
    }>, lazyload?: boolean | undefined, _application?: IApplication, client?: BotClient);
    fetchData(): Promise<ISession>;
    get id(): string;
    get applicationId(): string;
    get application(): IApplication | null;
    loadApplicationInfo(): Promise<IApplication>;
    get ready(): boolean;
    get frozen(): boolean;
    protected set frozen(v: boolean);
    get knowledges(): IKnowledge[] | undefined;
    setKnowledges(knowledges?: IKnowledge[]): Promise<IKnowledge[] | undefined>;
    validateConfigs(): void;
    get promptVariables(): ISessionPrompt[];
    setPromptVariables(v: ISessionPrompt[]): Promise<ISessionPrompt[] | undefined>;
    get netOpen(): boolean;
    /**
     * 异步设置会话的网络访问开关状态
     * @param v - 布尔值，表示是否开启网络访问，true 为开启，false 为关闭
     * @returns 如果设置成功，返回最终的网络访问开关状态；若不满足设置条件，则提前返回 undefined
     */
    setNetOpen(v: boolean): Promise<boolean | undefined>;
    private getService;
    addEventListener(eventName: SessionEventName, callback: any, once?: boolean): void;
    removeEventListener(eventName: SessionEventName, callback: any): void;
    /**
     * 获取对话记录
     * @param params ChatHistoryParams
     * @returns Promise<false|Message[]>
     */
    fetchMessages(params?: ChatHistoryParams): Promise<false | {
        actions: ActionPayloadBasic[][];
        relatedQuesion: string[] | undefined;
        ts?: string | undefined;
        messageId: string;
        content: string;
        role: ChatMessageRole;
        userId?: string | undefined;
        sessionId: string;
        reference: import("@glodon-aiot/apis").IReference[];
        searchReference: import("@glodon-aiot/apis").ISearchRefernce[];
        comment?: import("@glodon-aiot/apis/dist/src/cvforce").ICommentParam | undefined;
        knowledges?: IKnowledge[] | undefined;
        isLoading?: boolean | undefined;
        messageTime: string;
        fileId?: string | undefined;
        file?: import("@glodon-aiot/apis/dist/src/cvforce").KnowledgeFileMetadata | undefined;
        chatMode?: import("@glodon-aiot/apis").ChatMode | undefined;
        llmModel?: string | undefined;
        isContext?: boolean | undefined;
        index?: number | undefined;
        agentHistoryList?: {
            agentList: string;
            createdAt: string;
            creator: string;
            deletedAt: string;
            id: string;
            updatedAt: string;
        } | undefined;
        finish?: boolean | undefined;
        code?: number | undefined;
        isSensitive?: boolean | undefined;
        message?: string | undefined;
        stream?: boolean | undefined;
        fileIds?: string[] | undefined;
        isReplying?: boolean | undefined;
        files?: import("@glodon-aiot/apis").ChatMessageFile[] | undefined;
        thinkingSecs?: number | undefined;
        thinkingStatus?: "end" | "start" | undefined;
        reasoningContent?: string | undefined;
    }[]>;
    rename(name: string): Promise<boolean>;
    protected pushMessage(message: IChatMessage): Promise<void>;
    reloadSessionInfo(): Promise<this>;
    reload(): Promise<unknown>;
    delete(): Promise<string | false>;
    activate(): Promise<unknown>;
    inactivate(immediately?: boolean): boolean;
    abstract prepareConnection(): Promise<boolean>;
    abstract sendQuestion(params: QuestionBody, configs: QuestionConfig): any;
    abstract stopAnswer(): any;
    get dataLoaded(): boolean;
    get messagesLoading(): boolean;
    send(params: {
        text?: string;
        uuid?: string;
        fileIds?: string[];
    }, configs?: QuestionConfig): Promise<false | {
        sessionId: string;
        role: number;
        content: string;
        messageId: string;
        reference: never[];
        searchReference: never[];
        messageTime: string;
    }>;
    protected getRelatedQuesion(message: IChatMessage): Promise<IChatMessage>;
    protected fillMessageReference(message: IChatMessage): Promise<IChatMessage>;
    answerAgain(configs?: QuestionConfig): Promise<void>;
    setTop(top: boolean): Promise<void>;
    /**
     * 暂停当前会话的回答过程
     * 该方法会停止当前回答，标记回答停止状态，处理正在进行的消息和操作，
     * 并根据情况更新消息内容或添加新的系统消息。
     * @returns 返回当前会话实例
     */
    suspend(): this | undefined;
    /**
     * 异步提交评论信息
     * @param params - 评论参数，包含评论相关的信息，如消息 ID 等
     * @returns 返回调用 API 提交评论后的响应结果
     */
    postMessageComment(params: ICommentParam): Promise<string>;
    /**
     * 清除当前会话的上下文信息
     * 该方法会调用 API 清除指定会话的上下文，并在操作成功后触发相应事件
     * @returns 如果会话 ID 存在且清除操作成功，返回一个解析为 true 的 Promise；若会话 ID 不存在，抛出错误
     */
    clear(): Promise<boolean>;
    /**
     * 销毁当前会话实例，执行清理操作并触发销毁事件
     * @returns 返回当前会话的 ID，如果会话 ID 不存在则返回空字符串
     */
    destroy(): string;
}
export {};
