// 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 users/jane@google.com/chrome/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;
