import React, { Component } from 'react';
import { Immutable } from 'nuclear-js';
import { connect } from 'react-redux';
import Avatar from '@atlaskit/avatar';
import InlineMessage from '@atlaskit/inline-message';
import { getInviteURL } from '../../base/connection';
import { Dialog, hideDialog } from '../../base/dialog';
import { translate } from '../../base/i18n';
import MultiSelectAutocomplete
    from '../../base/react/components/web/MultiSelectAutocomplete';
import { invitePeople, inviteRooms, searchPeople } from '../functions';
declare var interfaceConfig: Object;
const { PropTypes } = React;
/**
 * The dialog that allows to invite people to the call.
 */
class AddPeopleDialog extends Component {
    /**
     * {@code AddPeopleDialog}'s property types.
     *
     * @static
     */
    static propTypes = {
        /**
         * The {@link JitsiMeetConference} which will be used to invite "room"
         * participants through the SIP Jibri (Video SIP gateway).
         */
        _conference: PropTypes.object,
        /**
         * The URL pointing to the service allowing for people invite.
         */
        _inviteServiceUrl: PropTypes.string,
        /**
         * The url of the conference to invite people to.
         */
        _inviteUrl: PropTypes.string,
        /**
         * The JWT token.
         */
        _jwt: PropTypes.string,
        /**
         * The query types used when searching people.
         */
        _peopleSearchQueryTypes: PropTypes.arrayOf(PropTypes.string),
        /**
         * The URL pointing to the service allowing for people search.
         */
        _peopleSearchUrl: PropTypes.string,
        /**
         * The function closing the dialog.
         */
        hideDialog: PropTypes.func,
        /**
         * Invoked to obtain translated strings.
         */
        t: PropTypes.func
    };
    /**
     * Initializes a new {@code AddPeopleDialog} instance.
     *
     * @param {Object} props - The read-only properties with which the new
     * instance is to be initialized.
     */
    constructor(props) {
        super(props);
        this.state = {
            /**
             * Indicating that an error occurred when adding people to the call.
             */
            addToCallError: false,
            /**
             * Indicating that we're currently adding the new people to the
             * call.
             */
            addToCallInProgress: false,
            /**
             * The list of invite items.
             */
            inviteItems: new Immutable.List()
        };
        this._multiselect = null;
        this._resourceClient = {
            makeQuery: text => {
                const {
                    _jwt,
                    _peopleSearchQueryTypes,
                    _peopleSearchUrl
                } = this.props;
                return searchPeople(
                    _peopleSearchUrl,
                    _jwt,
                    text,
                    _peopleSearchQueryTypes
                );
            },
            parseResults: response => response.map(user => {
                const avatar = ( // eslint-disable-line no-extra-parens