// @flow
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { Popover } from '../../base/popover';
import {
    MuteButton,
    KickButton,
    RemoteControlButton,
    RemoteVideoMenu,
    VolumeSlider
} from './';
declare var $: Object;
declare var interfaceConfig: Object;
/**
 * React {@code Component} for displaying an icon associated with opening the
 * the {@code RemoteVideoMenu}.
 *
 * @extends {Component}
 */
class RemoteVideoMenuTriggerButton extends Component<*> {
    static propTypes = {
        /**
         * A value between 0 and 1 indicating the volume of the participant's
         * audio element.
         */
        initialVolumeValue: PropTypes.number,
        /**
         * Whether or not the participant is currently muted.
         */
        isAudioMuted: PropTypes.bool,
        /**
         * Whether or not the participant is a conference moderator.
         */
        isModerator: PropTypes.bool,
        /**
         * Callback to invoke when the popover has been displayed.
         */
        onMenuDisplay: PropTypes.func,
        /**
         * Callback to invoke choosing to start a remote control session with
         * the participant.
         */
        onRemoteControlToggle: PropTypes.func,
        /**
         * Callback to invoke when changing the level of the participant's
         * audio element.
         */
        onVolumeChange: PropTypes.func,
        /**
         * The ID for the participant on which the remote video menu will act.
         */
        participantID: PropTypes.string,
        /**
         * The current state of the participant's remote control session.
         */
        remoteControlState: PropTypes.number
    };
    /**
     * The internal reference to topmost DOM/HTML element backing the React
     * {@code Component}. Accessed directly for associating an element as
     * the trigger for a popover.
     *
     * @private
     * @type {HTMLDivElement}
     */
    _rootElement = null;
    /**
     * Initializes a new {#@code RemoteVideoMenuTriggerButton} instance.
     *
     * @param {Object} props - The read-only properties with which the new
     * instance is to be initialized.
     */
    constructor(props: Object) {
        super(props);
        // Bind event handler so it is only bound once for every instance.
        this._onShowRemoteMenu = this._onShowRemoteMenu.bind(this);
    }
    /**
     * Implements React's {@link Component#render()}.
     *
     * @inheritdoc
     * @returns {ReactElement}
     */
    render() {
        const content = this._renderRemoteVideoMenu();
        if (!content) {
            return null;
        }
        return (
            
                
                    
                
            
        );
    }
    _onShowRemoteMenu: () => void;
    /**
     * Opens the {@code RemoteVideoMenu}.
     *
     * @private
     * @returns {void}
     */
    _onShowRemoteMenu() {
        this.props.onMenuDisplay();
    }
    /**
     * Creates a new {@code RemoteVideoMenu} with buttons for interacting with
     * the remote participant.
     *
     * @private
     * @returns {ReactElement}
     */
    _renderRemoteVideoMenu() {
        const {
            initialVolumeValue,
            isAudioMuted,
            isModerator,
            onRemoteControlToggle,
            onVolumeChange,
            remoteControlState,
            participantID
        } = this.props;
        const buttons = [];
        if (isModerator) {
            buttons.push(
                
            );
            buttons.push(
                
            );
        }
        if (remoteControlState) {
            buttons.push(
                
            );
        }
        if (onVolumeChange) {
            buttons.push(
                
            );
        }
        if (buttons.length > 0) {
            return (
                
                    { buttons }
                
            );
        }
        return null;
    }
}
export default RemoteVideoMenuTriggerButton;