import { Participant } from '@zoom/videosdk';
import { CHAT_STATE_DEFAULT, REQUEST_HOST_ROLE_STATE_DEFAULT, TURN_QUEUE_STATE_DEFAULT, SharedState } from '../../shared';
import { ParticipationPermissions } from '../../shared/participation/types';
import { SessionStatus } from '../VideoPluginProvider/context';
import { CommandChannelStatus } from './useCommandChannelController';

export { CHAT_STATE_DEFAULT, REQUEST_HOST_ROLE_STATE_DEFAULT, TURN_QUEUE_STATE_DEFAULT };
export type SharedContextType = {
    sharedState: SharedState;
    requestSharedState: () => Promise<void>;
    pinnedUserIds: number[];
    pinForEveryone: (userId: number) => Promise<void>;
    unpinUserForEveryone: (userId: number) => Promise<void>;
    unpinForEveryone: () => Promise<void>;
    speakerQueue: Participant[];
    raisedHand: boolean;
    toggleHand: () => Promise<void>;
    lowerUserHand: (userId: number) => Promise<void>;
    toggleTurnQueue: (active: boolean) => Promise<void>;
    toggleChat: (active: boolean) => Promise<void>;
    alertUser: (userId: number, message: string) => Promise<void>;
    commandChannelStatus: CommandChannelStatus;
    commandChannelAttemptCount: number;
    commandChannelShouldShowRejoinAlert: boolean;
    changeSessionStatus: (status: SessionStatus) => Promise<void>;
    requestHostRole: () => Promise<void>;
    requestedHostUser: Participant | null;
    requestedHostRoleDialogVisible: boolean;
    rejectHostRoleRequest: () => Promise<void>;
    transferHostRoleToUser: ({ userId, censusUserId }: {
        userId: number;
        censusUserId: string;
    }) => Promise<void>;
    participationPermissions: ParticipationPermissions;
    participationGranted: {
        audio: boolean;
        video: boolean;
    } | null;
    participationRevoked: boolean;
    participationVideoRevoked: boolean;
    pendingParticipationInvite: {
        audio: boolean;
        video: boolean;
    } | null;
    resetParticipationGranted: () => void;
    resetParticipationRevoked: () => void;
    resetParticipationVideoRevoked: () => void;
    resetPendingParticipationInvite: () => void;
    grantParticipation: (userId: number, audio: boolean, video: boolean) => Promise<void>;
    revokeParticipation: (userId: number) => Promise<void>;
    revokeVideoParticipation: (userId: number) => Promise<void>;
    requestParticipation: (userId: number, audio: boolean, video: boolean) => Promise<void>;
};
export declare const SharedContext: import('react').Context<SharedContextType>;
export declare const useSharedContext: () => SharedContextType;
