'use strict';

class EventTarget {
    constructor() {
        this.eventTarget = document.createDocumentFragment();
        for (let method of [
            'addEventListener',
            'dispatchEvent',
            'removeEventListener'
        ]) {
            this[method] = this.eventTarget[method].bind(this.eventTarget);
        }
    }
};

function proxyEvent(source, target, sourceEventType, targetEventType) {
    if (!source.addEventListener) {
        return;
    }
    if (!targetEventType) {
        targetEventType = sourceEventType;
    }
    source.addEventListener(sourceEventType, e => {
        target.dispatchEvent(new CustomEvent(targetEventType, {
            detail: e.detail,
        }));
    });
}

module.exports = {
    Success: 'success',
    Error: 'error',
    Info: 'info',

    proxyEvent: proxyEvent,
    EventTarget: EventTarget,
};
