// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
 * Console is a Pipe Viewer that displays a text stream as unformatted text
 * @tutorial echo "Hello World" | p2b google/p2b/[name]/console/panic
 * @fileoverview
 */

import { View } from 'view';
import { PipeViewer } from 'pipe-viewer';

class ConsolePanicPipeViewer extends PipeViewer {
  get name() {
    return 'console-panic';
  }

  play(stream) {
    var consoleView = document.createElement('p2b-plugin-console-panic');

    // Internal stream variables
    var panicked = false;
    var lastPiece = "";

    // read data as UTF8
    stream.setEncoding('utf8');
    stream.on('data', (buf) => {
      // Always split the incoming text by newline.
      var pieces = buf.toString().split("\n");
      for (var i = 0; i < pieces.length; i++) {
        var piece = pieces[i];

        // flags for the status of the current line
        var goroutine = (piece.search(/goroutine \d+ \[\D+\]:/) == 0);
        var startOfLine = (i != 0 || lastPiece == "");

        if (goroutine && startOfLine) {
          // We spotted a goroutine at the start of a line, so create a new container.
          consoleView.startNewContainer(panicked, piece);

          // Stop scrolling if we've already panicked.
          // This will focus the element on the first crashed goroutine.
          if (panicked) {
            consoleView.scrollAuto();
            consoleView.scrollOff();
          }
          panicked = true;

          // We also need a new line for our new container.
          consoleView.startNewLine();
        } else if (i > 0) {
          // These lines followed a \n in the buffer and thus should go on a new line.
          if (lastPiece == "") {
            // The previous line was empty; empty div's have 0 height.
            // We need to add a <br /> to print the linebreak properly.
            consoleView.addLineBreak();
          }
          consoleView.startNewLine();
        }

        // Add the relevant text.
        consoleView.addText(piece);
        lastPiece = piece;
      }
    });

    return new View(consoleView);
  }
}

export default ConsolePanicPipeViewer;
