import { Room, SyncState } from "matrix-js-sdk/src/matrix";
import { ActionPayload } from "../../dispatcher/payloads";
import { AsyncStoreWithClient } from "../AsyncStoreWithClient";
import { MatrixDispatcher } from "../../dispatcher/dispatcher";
import { TagID } from "../room-list/models";
import { ListNotificationState } from "./ListNotificationState";
import { RoomNotificationState } from "./RoomNotificationState";
import { SummarizedNotificationState } from "./SummarizedNotificationState";
interface IState {
}
export declare const UPDATE_STATUS_INDICATOR: unique symbol;
export declare class RoomNotificationStateStore extends AsyncStoreWithClient<IState> {
    private static readonly internalInstance;
    private roomMap;
    private listMap;
    private _globalState;
    private constructor();
    /**
     * @internal Public for test only
     */
    static testInstance(dispatcher: MatrixDispatcher): RoomNotificationStateStore;
    /**
     * Gets a snapshot of notification state for all visible rooms. The number of states recorded
     * on the SummarizedNotificationState is equivalent to rooms.
     */
    get globalState(): SummarizedNotificationState;
    /**
     * Gets an instance of the list state class for the given tag.
     * @param tagId The tag to get the notification state for.
     * @returns The notification state for the tag.
     */
    getListState(tagId: TagID): ListNotificationState;
    /**
     * Gets a copy of the notification state for a room. The consumer should not
     * attempt to destroy the returned state as it may be shared with other
     * consumers.
     * @param room The room to get the notification state for.
     * @returns The room's notification state.
     */
    getRoomState(room: Room): RoomNotificationState;
    static get instance(): RoomNotificationStateStore;
    private onSync;
    /**
     * If the SummarizedNotificationState of this room has changed, or forceEmit
     * is true, emit an UPDATE_STATUS_INDICATOR event.
     *
     * @internal public for test
     */
    emitUpdateIfStateChanged: (state: SyncState, forceEmit: boolean) => void;
    protected onReady(): Promise<void>;
    protected onNotReady(): Promise<any>;
    protected onAction(payload: ActionPayload): Promise<void>;
}
export {};
