import { RequestApi } from '../constant/api';
import { GroupType, MessageType } from './enum';
import { HttpMethod } from '../utils/request';
import { MessageService } from '../api/message';
import { ConversationService } from '../api/conversation';
import { GroupService } from '../api/group';
import { UserService } from '../api/user';
export type ServiceTypes = {
    user: UserService;
    message: MessageService;
    conversation: ConversationService;
    group: GroupService;
};
export declare enum ServiceName {
    MESSAGE = "message",
    CONVERSATION = "conversation",
    GROUP = "group",
    USER = "user"
}
export interface Request {
    url: RequestApi;
    username?: string;
    data: Record<string, any> | undefined;
    method: HttpMethod;
}
export interface SseData {
    ev: number;
    dt: MessageItem[];
}
export interface ServerResponse<T = unknown> {
    type?: MessageType;
    code: number;
    msg: string;
    data: T;
    timestamp?: number;
}
export type Pagination = {
    offset: number;
    count: number;
};
export type ConversationItem = {
    id: number;
    name: string;
    groupType: GroupType;
    avatar: string;
    status: number;
    latest: MessageItem;
    unreadCount: number;
    draftText: string;
    custom: string;
    groupMemberId: string;
};
export type HistoryMessageParam = {
    groupId: number;
    lastId: string;
    size?: number;
};
export type LiveMessageParam = {
    groupId: number;
};
export type ReqPageParam = {
    pageNo?: number;
    pageSize?: number;
};
export type MarkConversationReadParam = {
    groupId?: number;
    id?: number;
};
export type PageParam<T> = {
    current: number;
    pages: number;
    size?: number;
    total?: number;
    records: T[];
};
interface AvatarMap {
    [username: string]: string;
}
export type MessageItem = {
    msgId: number;
    username: string;
    groupType: GroupType;
    groupId: number;
    replyMsgId: number;
    clientMsgId: string;
    recvId: string;
    receiverName: string;
    userId: number;
    send: number;
    to: number;
    msgType: MessageType;
    text?: string;
    link?: string;
    snapshot?: string;
    createTime: number;
    updateTime?: number;
    status: number;
    avatar?: string;
};
export interface GroupInfoVO {
    /**
     * 群名称
     */
    name: string;
    /**
     * 聊天群类型: 0:一对一私聊 ，1：群聊，2：客服聊天
     */
    groupType: GroupType;
    createTime: number;
    updateTime: number;
    /**
     * 创建人
     */
    createBy: number;
    /**
     * 群头像
     */
    avatar: string;
    /**
     * 群公告
     */
    announcement: string;
    /**
     * 群二维码
     */
    qrCode: string;
    /**
     * pin消息列表
     */
    pinMsg: string;
    /**
     * 群成员人数
     */
    membersCount: number;
    memberVOList: GroupMemberVO[];
    /**
     * 人数上限
     */
    memberLimit: number;
    imagesCount: number;
    videosCount: number;
    filesCount: number;
    linksCount: number;
    gifsCount: number;
    /**
     * 群状态: 0:正常,1禁止发言,2解散
     */
    status: number;
}
export interface GroupMemberVO {
    username: string;
    /**
     * 群成员状态: 0:正常, 1：禁言, 2：删除
     */
    status: number;
    /**
     * 群身份: 0: owner, 1: admin, 2: user
     */
    identity: number;
    remark: string;
    /**
     * 最后查看消息的时间
     */
    lastSeenTime: number;
    /**
     * 是否已经添加了好友
     */
    contact: boolean;
}
export interface HistoryMessageResponse {
    groupChatList: MessageItem[];
    groupId: number;
    latest: MessageItem;
    avatarMap: AvatarMap;
    userId: number | null;
}
export interface MessagesListLoadedPayload {
    messages: MessageItem[];
    groupId: number;
    lastId: string;
    error: string;
}
export interface ActiveConversationSyncPayload {
    conversationId: number;
    lastLocalMessageId?: number;
    serverLatestMessageId: number;
    timestamp: number;
}
export interface LatestMessagesUpdateResponse {
    ttl: number;
    groupChatIds: Record<number, number>;
}
export interface GroupPermission {
    id?: number;
    /**
     * 权限状态: 0: 启用，1: 不启用
     */
    status?: number;
    /**
     * 权限描述
     */
    description?: string;
    /**
     * 权限值
     */
    value?: number;
}
export interface UpdateGroupPermission {
    /** 群id */
    groupId: number;
    /** 更新的权限列表 */
    permissions: GroupPermission[];
}
export interface UpdateGroupMemberPermission {
    /** 群id */
    groupId: number;
    /**
     * 群成员id
     */
    targetMemberId: number;
    /** 更新的权限列表 */
    permissions: GroupPermission[];
}
export type SystemMessageResponse = {
    groupId: number;
    type: number;
};
export interface KickGroupMemberParams {
    /** 群id */
    groupId: number;
    /**
     * 0 ：踢人
     * 1：拉黑并踢人
     */
    kickType: number;
    /** 更新的权限列表 */
    usernames: string[];
}
export interface MuteMembersParams {
    /** 群id */
    groupId: number;
    /**
     * 0: 禁言  ，1：解除禁言
     */
    type: number;
    /** 更新的权限列表 */
    usernames: string[];
}
export {};
