// 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.
var hg = require('mercury');

module.exports = results;
module.exports.render = require('./render');

function results() {
  var state = hg.state({
    logs: hg.array([]),
    open: hg.value(false),
    follow: hg.value(true),
    debug: hg.value(false),
    channels: {
      follow: follow,
      debug: debug,
      toggle: toggle
    }
  });

  return state;
}

function follow(state, data) {
  var following = state.follow();

  if (data.scrolling && following) {
    state.follow.set(false);
  }

  if (data.scrolledToBottom) {
    state.follow.set(true);
  }
}

function debug(state, data) {
  var current = state.debug();

  if (data.debug !== current) {
    state.debug.set(data.debug);
  }
}

function toggle(state, data) {
  var current = state.open();

  state.open.set(!current);
}
