import { User } from './user.model';
import { xmppSettingsInterface } from './xmpp.model';
import { PartialRoomWithMandatoryKeys, ConfigRoom } from './room.model';
import { MessageBubble, MessageProps } from './message.model';
import { Iso639_1Codes } from './language.model';
import { default as React } from 'react';
export interface FBConfig {
    apiKey: string;
    authDomain: string;
    projectId: string;
    storageBucket: string;
    messagingSenderId: string;
    appId: string;
}
export interface IConfig {
    disableHeader?: boolean;
    disableMedia?: boolean;
    colors?: {
        primary: string;
        secondary: string;
    };
    googleLogin?: {
        enabled: boolean;
        firebaseConfig: FBConfig;
    };
    jwtLogin?: {
        token: string;
        enabled: boolean;
        handleBadlogin?: React.ReactElement;
    };
    userLogin?: {
        enabled: boolean;
        user: User | null;
    };
    customLogin?: {
        enabled: boolean;
        loginFunction: () => Promise<User | null>;
    };
    baseUrl?: string;
    customAppToken?: string;
    xmppSettings?: xmppSettingsInterface;
    disableRooms?: boolean;
    defaultLogin?: boolean;
    disableInteractions?: boolean;
    chatHeaderBurgerMenu?: boolean;
    forceSetRoom?: boolean;
    roomListStyles?: React.CSSProperties;
    chatRoomStyles?: React.CSSProperties;
    setRoomJidInPath?: boolean;
    disableRoomMenu?: boolean;
    defaultRooms?: ConfigRoom[];
    refreshTokens?: {
        enabled: boolean;
        refreshFunction?: () => Promise<{
            accessToken: string;
            refreshToken?: string;
        } | null>;
    };
    backgroundChat?: {
        color?: string;
        image?: string | File;
    };
    bubleMessage?: MessageBubble;
    headerLogo?: string | React.ReactElement;
    headerMenu?: () => void;
    headerChatMenu?: () => void;
    customRooms?: {
        rooms: PartialRoomWithMandatoryKeys[];
        disableGetRooms?: boolean;
        singleRoom: boolean;
    };
    translates?: {
        enabled: boolean;
        translations?: Iso639_1Codes;
    };
    disableRoomConfig?: boolean;
    disableProfilesInteractions?: boolean;
    disableUserCount?: boolean;
    clearStoreBeforeInit?: boolean;
    disableSentLogic?: boolean;
    initBeforeLoad?: boolean;
    newArch?: boolean;
    qrUrl?: string;
    secondarySendButton?: {
        enabled: boolean;
        messageEdit: string;
        label?: React.ReactNode;
        buttonStyles?: React.CSSProperties;
        hideInputSendButton?: boolean;
        overwriteEnterClick?: true;
    };
    enableRoomsRetry?: {
        enabled: boolean;
        helperText: string;
    };
    disableNewChatButton?: boolean;
    chatHeaderAdditional?: {
        enabled: boolean;
        element: any;
    };
    botMessageAutoScroll?: boolean;
    messageTextFilter?: {
        enabled: boolean;
        filterFunction: (text: string) => string;
    };
    eventHandlers?: {
        onMessageSent?: (event: {
            message: string;
            roomJID: string;
            user: any;
            messageType: 'text' | 'media';
            metadata?: any;
        }) => void | Promise<void>;
        onMessageFailed?: (event: {
            message: string;
            roomJID: string;
            error: Error;
            messageType: 'text' | 'media';
        }) => void;
        onMessageEdited?: (event: {
            messageId: string;
            newMessage: string;
            roomJID: string;
            user: any;
        }) => void;
    };
    disableTypingIndicator?: boolean;
    blockMessageSendingWhenProcessing?: boolean;
    customTypingIndicator?: {
        enabled: boolean;
        text?: string | ((usersTyping: string[]) => string);
        position?: 'bottom' | 'top' | 'overlay' | 'floating';
        styles?: React.CSSProperties;
        customComponent?: React.ComponentType<{
            usersTyping: string[];
            text: string;
            isVisible: boolean;
        }>;
    };
    whitelistSystemMessage?: string[];
    customSystemMessage?: React.ComponentType<MessageProps>;
}
