import { MediaStreamTrack } from 'react-native-webrtc';
import { MediaPeer } from "../store/peersSlice";
export declare type APIOrganization = {
    id?: string;
    name?: string;
    description?: string;
};
export declare type APIUser = {
    id?: string;
    name?: string;
    email?: string;
    title?: string;
    picture?: string;
    verified?: string;
    allowMails?: boolean;
    socials?: {
        provider: string;
    }[];
    ownedOrgs?: APIOrganization[];
};
export declare type APISessionData = {
    roomName?: string;
    roomNodeLink?: string;
};
export declare type LoggedUserData = {
    loggedUser: APIUser;
};
export declare type APIFields = {
    type?: string;
    value?: string;
};
export declare type APIFeedback = {
    id?: string;
    rating?: Number;
    roomUUID?: string;
    operatingSystem?: string;
    browser?: string;
    createdBy?: string;
    fields?: APIFields[];
};
export declare enum SessionJoiningRestriction {
    NO_VIDEO = 0,
    NO_MIC = 1
}
export declare enum SessionProducerAccessType {
    NOT_ALLOWED = 0,
    REQUEST_FIRST = 1,
    ALLOWED = 2
}
export declare enum MessageTypes {
    text = 0,
    image = 1,
    file = 2,
    poll = 3
}
export interface ChatMessageBase {
    userId: string;
    displayName: string;
    read?: boolean;
    time?: number;
}
export interface TextMessage extends ChatMessageBase {
    type: MessageTypes.text;
    message: string;
}
export interface ImageMessage extends ChatMessageBase {
    type: MessageTypes.image;
    link: string;
}
export interface FileMessage extends ChatMessageBase {
    type: MessageTypes.file;
    name: string;
    size: number;
    link: string;
}
export interface PollMessage extends ChatMessageBase {
    type: MessageTypes.poll;
    pollId: string;
}
export declare type ChatMessage = TextMessage | ImageMessage | FileMessage | PollMessage;
export declare type SessionTogglesInput = {
    waitingRoom?: boolean;
    inviteOnly?: boolean;
    joinRestrictions?: SessionJoiningRestriction[];
    micAccess?: SessionProducerAccessType;
    webcamAccess?: SessionProducerAccessType;
    sharingAccess?: SessionProducerAccessType;
    pluginAccess?: SessionProducerAccessType;
};
export declare type SessionScheduleInput = {
    startTime: Date;
    endTime: Date;
};
export declare type APICreateSessionInput = {
    title?: string;
    password?: string;
    inviteesEmails?: string[];
    toggles?: SessionTogglesInput;
    schedule?: SessionScheduleInput;
};
export interface PollCreatePayload {
    question: string;
    options: string[];
    anonymous: boolean;
    hideVotes: boolean;
}
export interface Poll {
    id: string;
    question: string;
    options: PollOption[];
    anonymous: boolean;
    hideVotes: boolean;
    createdBy: string;
}
export interface PollOption {
    text: string;
    votes: {
        id: string;
        name: string;
    }[];
    count: number;
}
export interface PollVotePayload {
    pollId: string;
    index: number;
}
export interface ProcessedPeer extends MediaPeer {
    isMe: boolean;
    isHost?: boolean;
    videoTrack: MediaStreamTrack;
    audioTrack: MediaStreamTrack;
    audioMuted: boolean;
    videoVisible: boolean;
    videoScore?: number;
    audioScore?: number;
    isPinned?: boolean;
    producingVideo?: boolean;
    producingAudio?: boolean;
    screenshare?: boolean;
    isScreensharing?: boolean;
}
