/* global config, getRoomName, getConfigParamsFromUrl */
/* global createConnectionExternally */
/**
 * Implements extrnal connect using createConnectionExtenally function defined
 * in external_connect.js for Jitsi Meet. Parses the room name and token from
 * the url and executes createConnectionExtenally.
 *
 * NOTE: If you are using lib-jitsi-meet without Jitsi Meet you should use this
 * file as reference only because the implementation is Jitsi Meet specific.
 *
 * NOTE: For optimal results this file should be included right after
 * exrnal_connect.js.
 */

/**
 * Executes createConnectionExternally function.
 */
(function () {
    var hashParams = getConfigParamsFromUrl("hash", true);
    var searchParams = getConfigParamsFromUrl("search", true);

    //Url params have higher proirity than config params
    var url = config.externalConnectUrl;
    if(hashParams.hasOwnProperty('config.externalConnectUrl'))
        url = hashParams["config.externalConnectUrl"];

    /**
     * Check if connect from connection.js was executed and executes the handler
     * that is going to finish the connect work.
     */
    function checkForConnectHandlerAndConnect() {

        if(window.APP && window.APP.connect.status === "ready") {
            window.APP.connect.handler();
        }
    }

    function error_callback(error){
        if(error) //error=undefined if external connect is disabled.
            console.warn(error);
        // Sets that global variable to be used later by connect method in
        // connection.js
        window.XMPPAttachInfo = {
            status: "error"
        };
        checkForConnectHandlerAndConnect();
    }

    if(!url || !window.createConnectionExternally) {
        error_callback();
        return;
    }
    var room_name = getRoomName();
    if(!room_name) {
        error_callback();
        return;
    }

    url += "?room=" + room_name;

    var token = hashParams["config.token"] || config.token ||
        searchParams.jwt;
    if(token)
        url += "&token=" + token;

    createConnectionExternally(url, function(connectionInfo) {
        // Sets that global variable to be used later by connect method in
        // connection.js
        window.XMPPAttachInfo = {
            status: "success",
            data: connectionInfo
        };
        checkForConnectHandlerAndConnect();
    }, error_callback);
})();