import type Peer from "peerjs";
import type { Socket } from "socket.io-client";
import type { Writable } from "svelte/store";
interface MediaConfig {
    audio: {
        active: boolean;
        disable: boolean;
        id: string;
    };
    camera: {
        active: boolean;
        disable: boolean;
        id: string;
    };
}
interface ConferenceConfig {
    id: string;
    started_at: number;
    users: {
        id: string;
        name: string;
        media: MediaConfig;
        pid: string;
    }[];
    owner: {
        id: string;
        name: string;
        media: MediaConfig;
    };
}
interface OwnerBroadcastData {
    /**
     * OnAir - it is affixed exclusively when connected to socket
     */
    onAir: boolean;
    /**
     * The value of the variable depends on the config,
     * when putting CID (ID of conference)
     */
    isOwner: boolean;
    /**
     * Status of conference
     *
     * @variation status
     * - disable - complete lack of work with the conference
     * - settings - configuring the conference configuration (owner)
     * - connections - onAir
     * - end - conference disable after connection
     */
    status: "disable" | "settings" | "connection" | "end";
    /**
     * Config of connection for working with conference
     *
     * @property connection.socket - socket instance for connection
     * @property connection.media - current media config of users
     * @property connection.peer - peer settings and config to display the current data
     */
    connection: {
        socket: Socket;
        media: MediaConfig;
        /**
         * Peer settings and config to display the current data
         *
         * @property {Peer} peer.connections - current connections for call
         * @property peer.streams - current streams to display in the interface
         */
        peer: {
            calls: {
                [socketID: string]: any;
            };
            connections: {
                [socketID: string]: Peer;
            };
            streams: {
                self: MediaStream;
                visitors: {
                    [socketID: string]: MediaStream;
                };
            };
        };
    };
    conference?: ConferenceConfig;
    /**
     * Media Stream type of MediaConfig
     * @param {MediaConfig} _config - config type of MediaConfig
     * @constructor
     */
    SetMediaConfig(_config: MediaConfig): void;
    /**
     * Set current user stream for call to conference
     * @param {MediaStream} _media - MediaStream for config
     * @constructor
     */
    SetStream(_media: MediaStream): void;
    /**
     * Start of Broadcast
     * @constructor
     */
    StartBroadcast(): void;
    /**
     * Initialization is store for standard projects
     * @param {String} name - name of store
     * @param val - default value of store
     * @constructor
     */
    InitStore(name: string, val: any): Writable<any>;
}
interface VisitorBroadcastData {
    /**
     * OnAir - it is affixed exclusively when connected to socket
     */
    onAir: boolean;
    /**
     * The value of the variable depends on the config,
     * when putting CID (ID of conference)
     */
    isOwner: boolean;
    /**
     * Status of conference
     *
     * @variation status
     * - disable - complete lack of work with the conference
     * - connections - onAir
     * - end - conference disable after connection
     */
    status: "disable" | "connection" | "end";
    /**
     * Config of connection for working with conference
     *
     * @property connection.socket - socket instance for connection
     * @property connection.media - current media config of users
     * @property connection.peer - peer settings and config to display the current data
     */
    connection: {
        socket: Socket;
        media: MediaConfig;
        /**
         * Peer settings and config to display the current data
         *
         * @property {Peer} peer.connections - current connections for call
         * @property peer.streams - current streams to display in the interface
         */
        peer: {
            pids: {
                [socketID: string]: any;
            };
            calls: {
                [socketID: string]: any;
            };
            connections: {
                self: {
                    [socketID: string]: Peer;
                };
                visitors: {
                    [socketID: string]: Peer;
                };
            };
            streams: {
                self: MediaStream;
                visitors: {
                    [socketID: string]: MediaStream;
                };
            };
        };
    };
    conference?: ConferenceConfig;
    /**
     * Media Stream type of MediaConfig
     * @param {MediaConfig} _config - config type of MediaConfig
     * @constructor
     */
    SetMediaConfig(_config: MediaConfig): void;
    /**
     * Set current user stream for call to conference
     * @param {MediaStream} _media - MediaStream for config
     * @constructor
     */
    SetStream(_media: MediaStream): void;
    /**
     * Join to broadcast
     * @constructor
     */
    JoinBroadcast(): void;
    /**
     * Initialization is store for standard projects
     * @param name - name of store
     * @param val - default value of store
     * @constructor
     */
    InitStore(name: string, val: any): Writable<any>;
}
export { OwnerBroadcastData, VisitorBroadcastData, MediaConfig };
