import { Calls, CallSessionConnectionState, Media } from "connectycube/types";
export declare enum ActiveMedia {
    USER = 0,
    DISPLAY = 1
}
export declare enum CallDataType {
    ON_CALL = "onCall",
    ON_STOP_CALLING = "onStopCalling",
    ON_ACCEPT = "onAccept",
    ON_REJECT = "onReject",
    ON_STOP = "onStop",
    ON_NOT_ANSWER = "onNotAnswer",
    ON_CONNECTION_STATE = "onConnectionState"
}
export type CallData = {
    userID?: number;
    userInfo?: Calls.UserInfo;
    connectionState?: CallSessionConnectionState;
};
export interface CallsStoreSessionState {
    activeCall: Calls.Session | null;
    incomingCall: Calls.Session | null;
}
export interface CallsStoreSessionDataState {
    deviceChangeEvent: Event | null;
    incomingCallCallData: CallData | null;
    incomingCallStopData: CallData | null;
    activeCallAcceptData: CallData | null;
    activeCallRejectData: CallData | null;
    activeCallStopData: CallData | null;
    activeCallNotAnswerData: CallData | null;
    activeCallConnectionStateData: CallData | null;
}
export interface CallsStoreMediaState {
    localStream: MediaStream | null;
    remoteStreams: {
        [key: number]: MediaStream;
    };
    userMediaParams: Media.UserParams;
    displayMediaParams: Media.DisplayParams;
    activeMedia: ActiveMedia;
}
export interface CallsStoreState extends CallsStoreSessionState, CallsStoreSessionDataState, CallsStoreMediaState {
    participantsIDs: Set<number>;
    hasActiveListeners: boolean;
}
export interface CallsStoreSessionActions {
    setActiveCall: (session: Calls.Session) => void;
    resetActiveCall: () => void;
    setIncomingCall: (session: Calls.Session) => void;
    resetIncomingCall: () => void;
}
export interface CallsStoreSessionDataActions {
    setDeviceChangeEvent: (deviceChangeEvent: Event) => void;
    upsertSessionData: (type: CallDataType, data: CallData) => void;
    resetSessionData: (type?: CallDataType) => void;
}
export interface CallsStoreMediaActions {
    setLocalStream: (stream: MediaStream) => void;
    resetLocalStream: () => void;
    addRemoteStream: (key: number, stream: MediaStream) => void;
    removeRemoteStream: (key: number) => void;
    resetRemoteStreams: () => void;
    saveUserMediaParams: (params: Media.UserParams) => void;
    resetUserMediaParams: () => void;
    saveDisplayMediaParams: (params: Media.DisplayParams) => void;
    resetDisplayMediaParams: () => void;
    saveActiveMedia: (activeMedia: ActiveMedia) => void;
}
export interface CallsStoreActions extends CallsStoreSessionActions, CallsStoreSessionDataActions, CallsStoreMediaActions {
    setParticipantsIDs: (participantsIDs: number[]) => void;
    participantDidEnter: (id: number) => void;
    participantDidLeave: (id: number) => void;
    activateCallsListeners: () => void;
    resetStore: () => void;
}
interface CallsStore extends CallsStoreState, CallsStoreActions {
}
declare const useCallsStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<CallsStore>, "subscribe"> & {
    subscribe: {
        (listener: (selectedState: CallsStore, previousSelectedState: CallsStore) => void): () => void;
        <U>(selector: (state: CallsStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
            equalityFn?: ((a: U, b: U) => boolean) | undefined;
            fireImmediately?: boolean;
        } | undefined): () => void;
    };
}>;
export default useCallsStore;
//# sourceMappingURL=useCallsStore.d.ts.map