import { ReactModel, ViewInfo } from '@multisynq/react';
import { UseStateTogetherWithPerUserValuesOptions } from '../hooks/useStateTogetherWithPerUserValues';
import { default as ChatModel } from './ChatModel';

interface setStateArgs<T> {
    rtKey: string;
    value: T | undefined;
}
interface SetStatePerUserArgs<T> {
    rtKey: string;
    userId: string;
    value: T | undefined;
}
interface ReactTogetherModelOptions extends Record<string, unknown> {
}
interface FunctionTogetherArgs {
    rtKey: string;
    args: unknown[];
}
interface CreateChatArgs {
    rtKey: string;
}
interface ConfigureStatePerUserArgs {
    rtKey: string;
    userId: string;
    options: UseStateTogetherWithPerUserValuesOptions;
}
interface StatePerUserConfig {
    keepValues?: boolean;
}
export default class ReactTogetherModel extends ReactModel {
    state: Map<string, unknown>;
    statePerUser: Map<string, Map<string, unknown>>;
    statePerUserConfig: Map<string, StatePerUserConfig>;
    chats: Map<string, ChatModel>;
    viewIdUserIdMapping: Map<string, string>;
    userIdCount: Map<string, number>;
    init(options: ReactTogetherModelOptions): void;
    handleViewJoin(viewId: string, viewInfo: ViewInfo<{
        userId?: string;
    }>): void;
    handleViewExit(viewId: string): void;
    setState<T>({ rtKey, value }: setStateArgs<T>): void;
    setStatePerUser<T>({ rtKey, userId, value }: SetStatePerUserArgs<T>): void;
    configureStatePerUser({ rtKey, options }: ConfigureStatePerUserArgs): void;
    functionTogether({ rtKey, args }: FunctionTogetherArgs): void;
    createChat({ rtKey }: CreateChatArgs): void;
}
export declare function getUserId(model: ReactTogetherModel, viewId: string): string;
export declare function getChat(model: ReactTogetherModel, rtKey: string): ChatModel | undefined;
export {};
