/*
 * -----------------------------------------------------------------------------
 *  Lucom Interaction Platform
 *  (C) Lucom GmbH, Erkrath. All rights reserved.
 *
 *  $Id: $
 * -----------------------------------------------------------------------------
 */
(function () {
	if (window.lucom &&
		window.lucom.ip &&
		window.lucom.ip.configuration) {
		console.log ("skipping initialization");
		return;
	}

	function embedScript (src) {
		let script = document.createElement ("script");
		script.src = src;
		script.async = false;
		document.head.appendChild (script);
	}

	let embedLink = function (rel, href) {
		let link = document.createElement ("link");
		link.rel = rel;
		link.href = href;
		document.head.appendChild (link);
	};

	embedLink ("stylesheet", "https://formularbot-fms.bzst.de/fms/wci/global.css");

	embedScript ("https://formularbot-fms.bzst.de/fms/wci/webcomponentsjs/custom-elements-es5-adapter.js");
	embedScript ("https://formularbot-fms.bzst.de/fms/wci/webcomponentsjs/webcomponents-loader.js");

	embedScript ("https://formularbot-fms.bzst.de/fms/shell/initialize.js");
	embedScript ("https://formularbot-fms.bzst.de/fms/shell/remoteEntry.js");
	embedScript ("https://formularbot-fms.bzst.de/fms/shell/bootstrap.js?embedded=true");

	let chatbotUrl = 'https://viola-bzst.azr.juacvoe.net/static/widget';

	window.addEventListener("lucom.wci.initialized", event => {
		let eventBus = event.detail.eventBus;
		let formView;

		eventBus.subscribe("component.mounted", component => {
			if (component.getComponentName() === "FormView") {
				formView = component;

				if (chatbotUrl) {
					window.addEventListener ("message", event => {
						let debug = "production" === "development";

						if (debug)
							console.log ("handling message event from origin " + event.origin + ", data: " + event.data);

						let message = String (event.data);

						if (message.startsWith ("chatbot.openForm:")) {
							if (event.origin !== chatbotUrl) {
								if (debug)
									console.log ("  event from unknown origin: " + event.origin);
								return;
							}
							let resolvablePath = message.substring ("chatbot.openForm:".length);
							let catalogId = resolvablePath.substring ("catalog://".length);
							let pos = catalogId.indexOf ("/");
							let formPath = catalogId.substring (pos);
							catalogId = catalogId.substring (0, pos);

							if (debug)
								console.log ("opening form " + formPath + " in catalog " + catalogId);

							formView.open (catalogId, formPath, {}).then (() => {
								if (debug)
									console.log ("opened new form with context id: " + formView.contextId);
							});
						}
					});
				}
			}
		});
	});
})();
