import React from "react";
import { WelcomePageOptions } from "../../components/miscComponents/WelcomePage";
import { SeedData, PreJoinPageOptions, CreateMediaSFURoomOptions, JoinMediaSFURoomOptions, JoinRoomOnMediaSFUType, CreateRoomOnMediaSFUType, CustomVideoCardType, CustomAudioCardType, CustomMiniCardType, MediasfuUICustomOverrides } from "../../@types/types";
export type MediasfuWebinarOptions = {
    PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => React.ReactNode;
    localLink?: string;
    connectMediaSFU?: boolean;
    credentials?: {
        apiUserName: string;
        apiKey: string;
    };
    useLocalUIMode?: boolean;
    seedData?: SeedData;
    useSeed?: boolean;
    imgSrc?: string;
    sourceParameters?: {
        [key: string]: any;
    };
    updateSourceParameters?: (data: {
        [key: string]: any;
    }) => void;
    returnUI?: boolean;
    noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;
    joinMediaSFURoom?: JoinRoomOnMediaSFUType;
    createMediaSFURoom?: CreateRoomOnMediaSFUType;
    customVideoCard?: CustomVideoCardType;
    customAudioCard?: CustomAudioCardType;
    customMiniCard?: CustomMiniCardType;
    customComponent?: React.ReactNode;
    containerStyle?: object;
    uiOverrides?: MediasfuUICustomOverrides;
};
/**
 * MediasfuWebinar component optimized for webinars.
 * Main focus is placed on the host with large screen area dedicated to the host.
 * Participants can share media (audio, video, screen share) with each other.
 * Participants can chat with each other and engage in polls and breakout rooms, share screens, and more during the webinar.
 *
 * @typedef {Object} MediasfuWebinarOptions
 * @property {function} [PrejoinPage=WelcomePage] - Function to render the prejoin page.
 * @property {string} [localLink=""] - Local link for the media server (if using Community Edition).
 * @property {boolean} [connectMediaSFU=true] - Flag to connect to the MediaSFU server (if using Community Edition and still need to connect to the server)
 * @property {Object} [credentials={ apiUserName: "", apiKey: "" }] - API credentials.
 * @property {boolean} [useLocalUIMode=false] - Flag to use local UI mode.
 * @property {SeedData} [seedData={}] - Seed data for initial state.
 * @property {boolean} [useSeed=false] - Flag to use seed data.
 * @property {string} [imgSrc="https://mediasfu.com/images/logo192.png"] - Image source URL.
 * @property {Object} [sourceParameters={}] - Source parameters.
 * @property {function} [updateSourceParameters] - Function to update source parameters.
 * @property {boolean} [returnUI=true] - Flag to return the UI.
 * @property {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} [noUIPreJoinOptions] - Options for the prejoin page.
 * @property {JoinRoomOnMediaSFUType} [joinMediaSFURoom] - Function to join a room on MediaSFU.
 * @property {CreateRoomOnMediaSFUType} [createMediaSFURoom] - Function to create a room on MediaSFU.
 * @property {CustomVideoCardType} [customVideoCard] - Custom video card component.
 * @property {CustomAudioCardType} [customAudioCard] - Custom audio card component.
 * @property {CustomMiniCardType} [customMiniCard] - Custom mini card component.
 * @property {React.ReactNode} [customComponent] - Custom main component to replace the entire UI.
 *
 * @typedef {Object} SeedData - Data structure to populate initial state in the MediasfuWebinar.
 * @property {string} [member] - The member name.
 * @property {string} [host] - The host name.
 * @property {EventType} [eventType] - The type of event.
 * @property {Participant[]} [participants] - The list of participants.
 * @property {Message[]} [messages] - The list of messages.
 * @property {Poll[]} [polls] - The list of polls.
 * @property {BreakoutParticipant[][]} [breakoutRooms] - The list of breakout rooms.
 * @property {Request[]} [requests] - The list of requests.
 * @property {WaitingRoomParticipant[]} [waitingList] - The list of waiting room participants.
 * @property {WhiteboardUser[]} [whiteboardUsers] - The list of whiteboard users.
 *
 * @component
 * @param {MediasfuWebinarOptions} props - Component properties.
 * @returns {React.FC<MediasfuWebinarOptions>} The MediasfuWebinar component.
 *
 * @example
 * ```tsx
 * <MediasfuWebinar
 *   PrejoinPage={WelcomePage}
 *   credentials={{ apiUserName: "username", apiKey: "apikey" }}
 *   useLocalUIMode={false}
 *   seedData={{}}
 *   useSeed={false}
 *   imgSrc="https://mediasfu.com/images/logo192.png"
 *   sourceParameters={{ key: value }}
 *   updateSourceParameters={updateSourceParameters}
 *   returnUI={true}
 *   noUIPreJoinOptions={customPreJoinOptions}
 *   joinMediaSFURoom={joinRoomOnMediaSFU}
 *   createMediaSFURoom={createRoomOnMediaSFU}
 * />
 * ```
 *
 * @description
 * This component handles the main logic for joining a media webinar room using WebRTC and Mediasoup.
 * It manages the state and references for various parameters required for the webinar, including
 * user credentials, room details, media settings, and recording options.
 *
 * The component also provides methods for updating state to initial values, joining a room using a socket,
 * and handling various media and room-related functionalities.
 */
declare const MediasfuWebinar: React.FC<MediasfuWebinarOptions>;
export default MediasfuWebinar;
