(function() {
    var httpsEnabled = window.location.protocol == "https:";
    var url = (httpsEnabled ? 'wss://' : 'ws://') + window.location.host + window.location.pathname + 'ws';
    var protocols = ["gotty"];
    var ws = new WebSocket(url, protocols);

    var term;

    ws.onopen = function(event) {
        hterm.defaultStorage = new lib.Storage.Local()

        term = new hterm.Terminal();

        term.onTerminalReady = function() {
            var io = term.io.push();

            io.onVTKeystroke = function(str) {
                ws.send("0" + str);
            };

            io.sendString = io.onVTKeystroke;

            io.onTerminalResize = function(columns, rows) {
                ws.send(
                    "1" + JSON.stringify(
                        {
                            name: "resize_terminal",
                            arguments: {
                                columns: columns,
                                rows: rows,
                            },
                        }
                    )
                )
            };

            term.installKeyboard();
        };

        term.decorate(document.body);
    };

    ws.onmessage = function(event) {
        term.io.writeUTF16(event.data);
    }

    ws.onclose = function(event) {
        term.io.showOverlay("Connection Closed", null);
        term.uninstallKeyboard();
    }
})()
