/* eslint-disable no-undef */
define(['require', 'mustache', 'jquery'], function (require, Mustache, $) {
	function ContentLayout(params) {
		const moduleURL = require.toUrl('./render.mjs');
		this.loadModule = import(moduleURL)
			.then(({ default: ModuleComponent }) => {
				if (ModuleComponent) {
					const moduleParams = { ...params };
					moduleParams.$ = params.$ || $;
					moduleParams.Mustache = params.Mustache || Mustache;
					return Promise.resolve(new ModuleComponent(moduleParams));
				} else {
					return Promise.reject(new Error(`Failed to load module: ${moduleURL}`));
				}
			})
			.catch((e) => {
				console.error(e);
			});
	}
	ContentLayout.prototype.contentVersion = '>=1.0.0 <2.0.0';
	ContentLayout.prototype.render = function (parentObj) {
		this.loadModule.then((module) => {
			module.render(parentObj);
		});
	};
	ContentLayout.prototype.hydrate = function (parentObj) {
		this.loadModule.then((module) => {
			module.hydrate(parentObj);
		});
	};
	return ContentLayout;
});
