import { RemoteDialogDTO } from '../../dto/dialog/RemoteDialogDTO';
import { RemoteDialogsDTO } from '../../dto/dialog/RemoteDialogsDTO';
import { RemoteMessageDTO } from '../../dto/message/RemoteMessageDTO';
import { RemoteUserDTO } from '../../dto/user/RemoteUserDTO';
import { RemoteUsersDTO } from '../../dto/user/RemoteUsersDTO';
import { RemoteMessagesDTO } from '../../dto/message/RemoteMessagesDTO';
import { RemoteFileDTO } from '../../dto/file/RemoteFileDTO';
import { Pagination } from '../../../Domain/repository/Pagination';
import { IDTOMapper } from './Mapper/IDTOMapper';
import { QBInitParams } from '../../../qb-api-calls';
import { NotificationTypes } from '../../../Domain/entity/NotificationTypes';
import { SubscriptionPerformer } from '../../../Domain/use_cases/base/Subscribable/SubscriptionPerformer';
import { CallBackFunction } from '../../../Domain/use_cases/base/IUseCase';
import { DialogEventInfo } from '../../../Domain/entity/DialogEventInfo';
import { IRemoteDataSource } from './IRemoteDataSource';
export type PaginatedDTOResult = {
    PaginationResult: Pagination;
    ResultData: RemoteUserDTO[];
};
export type LoginData = {
    login: string;
    password: string;
};
export type AuthorizationData = {
    sessionToken: string;
    userId: number;
    password: string;
    userName: string;
};
export declare class RemoteDataSource implements IRemoteDataSource {
    private userDTOMapper;
    private messageDTOMapper;
    private fileDTOMapper;
    private _needInit;
    private _authProcessed;
    get authProcessed(): boolean;
    set authProcessed(value: boolean);
    get needInit(): boolean;
    setAuthProcessedSuccessed(): void;
    setInitSDKSuccessed(): void;
    private _authInformation;
    get authInformation(): AuthorizationData | undefined;
    set authInformation(value: AuthorizationData | undefined);
    getCurrentDialogDTOMapper(): IDTOMapper;
    constructor();
    setUpMockStorage(): Promise<void>;
    private createUserSession;
    static initSDK(sdkParams: QBInitParams): boolean;
    initSDKWithUser(sdkParams: QBInitParams, authData: LoginData): Promise<void>;
    disconnectAndLogoutUser(): Promise<void>;
    releaseSubscriptions(): void;
    subscribeOnSystemMessaging(notificationType: NotificationTypes, callback: CallBackFunction<RemoteMessageDTO>): void;
    protected subscriptionOnSystemMessages: Dictionary<SubscriptionPerformer<RemoteMessageDTO>>;
    subscribeOnMessaging(callback: CallBackFunction<RemoteMessageDTO>): void;
    protected subscriptionOnChatMessages: SubscriptionPerformer<RemoteMessageDTO>;
    protected subscriptionOnMessageStatus: SubscriptionPerformer<DialogEventInfo>;
    protected subscriptionOnSessionExpiredListener: SubscriptionPerformer<boolean>;
    subscribeOnSessionExpiredListener(callback: CallBackFunction<boolean>): void;
    subscribeOnUpdateMessageStatus(callback: CallBackFunction<DialogEventInfo>): void;
    initEventsHandlers(): void;
    releaseEventsHandlers(): void;
    loginWithUser(authParams: LoginData): Promise<void>;
    getDialogs(pagination?: Pagination): Promise<RemoteDialogsDTO>;
    createDialog(dto: RemoteDialogDTO): Promise<RemoteDialogDTO>;
    updateDialog(dto: RemoteDialogDTO): Promise<RemoteDialogDTO>;
    getDialog(dto: RemoteDialogDTO): Promise<RemoteDialogDTO>;
    deleteDialog(dto: RemoteDialogDTO): Promise<void>;
    deleteUsersFromDialog(dialogDTO: RemoteDialogDTO, usersDTO: Array<RemoteUserDTO>): Promise<void>;
    getUser(dto: RemoteUserDTO): Promise<RemoteUserDTO>;
    getUsers(remoteUsersDTO: RemoteUsersDTO): Promise<RemoteUsersDTO>;
    getAllUsers(pagination: Pagination, filter?: string): Promise<PaginatedDTOResult>;
    getMessages(dialogId: string, pagination: Pagination): Promise<RemoteMessagesDTO>;
    typingMessageStart(dialogDTO: RemoteDialogDTO, senderId: number): Promise<void>;
    typingMessageStop(dialogDTO: RemoteDialogDTO, senderId: number): Promise<void>;
    sendMessage(dto: RemoteMessageDTO): Promise<RemoteMessageDTO>;
    sendSystemMessage(dto: RemoteMessageDTO): Promise<boolean>;
    updateMessage(dto: RemoteMessageDTO): Promise<RemoteMessageDTO>;
    deleteMessage(dto: RemoteMessageDTO): Promise<void>;
    createFile(dto: RemoteFileDTO): Promise<RemoteFileDTO>;
    getFile(dto: RemoteFileDTO): Promise<RemoteFileDTO>;
    deleteFile(dto: RemoteFileDTO): Promise<void>;
    subscribeToChatConnectionEvents(fileId: string): Promise<void>;
}
