async function loadModule(path) {
	let module;
	try {
		module = await import(path);
	} catch (e) {
		console.error(`[TweetDuck] Error loading '${path}': ${e}`);
		return false;
	}
	
	try {
		module.default();
		console.info(`[TweetDuck] Successfully loaded '${path}'`);
		return true;
	} catch (e) {
		console.error(`[TweetDuck] Error executing '${path}': ${e}`);
	}
	
	return false;
}

async function loadFeatures() {
	const script = document.getElementById("tweetduck-bootstrap");
	const features = script.getAttribute("data-features").split("|");
	
	let successes = 0;
	for (const feature of features) {
		if (await loadModule(`./features/${feature}.js`)) {
			++successes;
		}
	}
	
	return [ successes, features.length ];
}

loadFeatures().then(([ successes, total ]) => {
	if ("$TD" in window) {
		window.$TD.onFeaturesLoaded();
	}
	
	if ("TD_PLUGINS" in window) {
		window.TD_PLUGINS.onFeaturesLoaded();
	}
	
	console.info(`[TweetDuck] Successfully loaded ${successes} / ${total} feature(s).`);
});