import {IS_SERVER} from "@gongt/ts-stl-library/check-environment";
import {createLogger} from "@gongt/ts-stl-library/debug/create-logger";
import {LOG_LEVEL} from "@gongt/ts-stl-library/debug/levels";

const warn = createLogger(LOG_LEVEL.WARN, 'mouse-event');

let listenerInit = false;
const list: Function[] = [];

export function trapMouseUpEvent(e: MouseEvent|TouchEvent, callback: (e: MouseEvent|TouchEvent) => void) {
	if (IS_SERVER) {
		warn('use mouse event on server. there may be some bug.');
		return;
	}
	
	// todo: touch events
	if (!listenerInit) {
		listenerInit = true;
		document.addEventListener('mouseup', handleEvent, false);
	}
	list.push(callback);
}

function handleEvent(e) {
	for (const cb of list) {
		try {
			cb(e);
		} catch (e) {
			warn(e.message);
		}
	}
	listenerInit = false;
	document.removeEventListener('mouseup', handleEvent, false);
	list.length = 0;
}
