import { IConversationModel, IGroupModel, IMessageModel, Friend, FriendApplication } from '@tencentcloud/chat-uikit-engine';

export interface ITUIComponents {
    TUIChat?: any;
    TUIConversation?: any;
    TUIContact?: any;
    TUISearch?: any;
    TUIGroup?: any;
    TUIProfile?: any;
    TUICallKit?: any;
    TUICallKitMini?: any;
    [propName: string]: any;
}
export interface ITUIPlugins {
    TUICallKit?: any;
    TUINotification?: any;
    [propName: string]: any;
}
export interface IEmojiGroup {
    type: string;
    emojiGroupID: number;
    url: string;
    list: string[];
}
export type IEmojiGroupList = IEmojiGroup[];
export interface ISendMessagePayload {
    text?: string;
    file?: any;
    atUserList?: string[];
}
export interface ISendMessageParams {
    to?: string;
    conversationType?: string;
    payload?: ISendMessagePayload;
    cloudCustomData?: any;
}
export interface ITransferListItem {
    isDisabled?: boolean;
    avatar?: string;
    nick?: string;
    userID?: string;
    [propName: string]: any;
}
export interface ICustomMessagePayload {
    businessID?: string;
    score?: number;
    comment?: string;
    link?: string;
    imageUrl?: string;
    title?: string;
    description?: string;
    price?: string;
    text?: string;
}
export interface IGroupApplication {
    applicant: string;
    applicantNick: string;
    groupID: string;
    groupName: string;
    applicationType: 0 | 2;
    userID: string;
    note: string;
    [propName: string]: any;
}
export interface IGroupApplicationUserProfile {
    userID: string;
    avatar: string;
    nick: string;
    actionStatus?: string;
    [propName: string]: any;
}
export type IGroupApplicationListItem = IGroupApplication;
export interface IFriendType {
    userID?: string;
    remark?: string;
    groupList?: any[];
    source?: string;
    wording?: string;
    profile?: IFriendProfile;
    friendCustomFriend?: Array<Record<string, any>>;
}
export interface IFriendProfile {
    userID?: string;
    avatar?: string;
    nick?: string;
    [propName: string]: unknown;
}
export interface IGroupMember {
    userID?: string;
    avatar?: string;
    nick?: string;
    role?: string;
    joinTime?: number;
    nameCard?: string;
    muteUntil?: string;
    memberCustomField?: Array<Record<string, any>>;
}
export interface IGroupSelfInfo {
    role?: string;
    messageRemindType?: string;
    joinTime?: number;
    nameCard?: string;
    userID?: string;
    memberCustomField?: Array<Record<string, any>>;
}
export interface IUserProfile {
    userID: string;
    nick: string;
    gender: string;
    birthday: number;
    location: string;
    selfSignature: string;
    allowType: string;
    language: number;
    avatar: string;
    messageSettings: number;
    adminForbidType: string;
    level: number;
    role: number;
    lastUpdatedTime: number;
    profileCustomField: Array<Record<string, any>>;
}
export interface IContactListItem {
    title: string;
    list: any[];
    key: string;
    unreadCount?: number;
}
export interface IContactList {
    friendApplicationList: IContactListItem;
    blackList: IContactListItem;
    groupList: IContactListItem;
    friendList: IContactListItem;
    [key: string]: IContactListItem;
}
export interface IContactSearchResult {
    user: {
        label: string;
        list: any[];
    };
    group: {
        label: string;
        list: any[];
    };
}
export interface IBlackListUserItem {
    userID: string;
    nick?: string;
    avatar?: string;
}
export type IContactInfoType = Friend | FriendApplication | IGroupModel | IBlackListUserItem;
export interface IContactInfoMoreItem {
    key: string;
    label: string;
    data: any;
    labelPosition?: string;
    editable?: boolean;
    editType?: string;
    editing?: boolean;
    editSubmitHandler?: () => void;
}
export interface IContactInfoButton {
    key: string;
    label: string;
    type: string;
    onClick: () => void;
}
export interface ISearchCloudMessageResult {
    totalCount: number;
    searchResultList: ISearchResultListItem[];
    cursor: string;
}
export interface ISearchResultListItem {
    conversation: IConversationModel;
    messageCount: number;
    messageList: IMessageModel[];
    type?: string;
}
export interface IImageMessageContent {
    showName?: string;
    url?: string;
    width?: number;
    height?: number;
}
export interface IVideoMessageContent {
    showName: string;
    url: string;
    snapshotUrl: string;
    snapshotWidth: number;
    snapshotHeight: number;
}
export interface ITextMessageContent {
    text: string;
}
export interface IMergeMessageContent {
    abstractList: string[];
    compatibleText: string;
    downloadKey: string;
    layersOverLimit: boolean;
    messageList: Array<{
        avatar: string;
        ID: string;
        cloudCustomData: string;
        from: string;
        messageBody: Array<{
            type: string;
            payload: Record<string, any>;
        }>;
        messageReceiver: string;
        messageRandom: number;
        messageSender: string;
        messageSequence: number;
        messageTime: number;
        nick: string;
        receiverUserID: string;
        time: number;
    }>;
    pbDownloadKey: string;
    showName: string;
    title: string;
    version: number;
}
export interface IFileMessageContent {
    name: string;
    url: string;
    size: number;
}
export interface IAudioMessageContent {
    showName: string;
    url: string;
    second: number;
}
export interface ICustomMessageContent {
    showName: string;
    custom: string;
    businessID: string;
}
export interface IAudioContext {
    src: string | undefined;
    startTime: number;
    duration: number;
    play: () => void;
    pause: () => void;
    stop: () => void;
    destroy: () => void;
    onPlay: (callback: (...args: any[]) => void) => void;
    onPause: (callback: (...args: any[]) => void) => void;
    onStop: (callback: (...args: any[]) => void) => void;
    onEnded: (callback: (...args: any[]) => void) => void;
    onError: (callback: (...args: any[]) => void) => void;
}
export interface ITipTapEditorContent {
    type: 'text' | 'image' | 'video' | 'file';
    payload: {
        text?: string;
        file?: File;
        atUserList?: string[];
    };
}
export interface IUserStatus {
    statusType: number;
    customStatus: string;
}
export interface IUserStatusMap {
    [userID: string]: IUserStatus;
}
export interface ITranslateInfo {
    conversationID: string;
    messageID: string;
    visible: boolean;
}
export interface IConvertInfo {
    conversationID: string;
    messageID: string;
    visible: boolean;
}
export interface IChatResponese<T> {
    code: string;
    data: T;
}
export type ToolbarDisplayType = 'emojiPicker' | 'tools' | 'none';
export type InputDisplayType = 'editor' | 'audio';
