const shortcuts = {};

let _shortcuts = [];

const lib = {
	handleKeyDown(event, keyCode, shift, ctrl, alt) {
		_shortcuts.forEach(shortcut => {
			if (
				shortcut.keyCode === keyCode &&
				shortcut.shift === shift &&
				shortcut.ctrl === ctrl &&
				shortcut.alt === alt
			) {
				console.log(
					`Executing shortcut ${shortcut.name}. Prevent default: ${shortcut.preventDefault}`
				);

				if (shortcut.preventDefault === true) event.preventDefault();

				shortcut.handler(event);
			}
		});
	},

	registerShortcut(name, shortcut) {
		shortcuts[name] = shortcut;
		shortcuts[name].name = name;
		shortcuts[name].alt = shortcuts[name].alt ? shortcuts[name].alt : false;
		shortcuts[name].ctrl = shortcuts[name].ctrl
			? shortcuts[name].ctrl
			: false;
		shortcuts[name].shift = shortcuts[name].shift
			? shortcuts[name].shift
			: false;
		lofig.get("shortcutOverrides").then(overrides => {
			if (overrides && overrides[name])
				shortcuts[name] = Object.assign(
					shortcuts[name],
					overrides[name]
				);
		});
		lib.remakeShortcutsArray();
	},

	unregisterShortcut: name => {
		delete shortcuts[name];
		lib.remakeShortcutsArray();
	},

	remakeShortcutsArray: () => {
		_shortcuts = Object.keys(shortcuts).map(key => shortcuts[key]);
	}
};

export default lib;
