'use strict';

const EventEmitter = require('events');

// wrapper around the Node.js ws module
// for use in browsers
class WebSocketWrapper extends EventEmitter {
    constructor(url) {
        super();
        this._ws = new WebSocket(url); // eslint-disable-line no-undef
        this._ws.onopen = () => {
            this.emit('open');
        };
        this._ws.onclose = () => {
            this.emit('close');
        };
        this._ws.onmessage = (event) => {
            this.emit('message', event.data);
        };
        this._ws.onerror = () => {
            this.emit('error', new Error('WebSocket error'));
        };
    }

    close() {
        this._ws.close();
    }

    send(data, callback) {
        try {
            this._ws.send(data);
            callback();
        } catch (err) {
            callback(err);
        }
    }
}

module.exports = WebSocketWrapper;