// 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 vdl = require('./ifc');

module.exports = PoolHeater;

var ACTIVE = 'active';
var IDLE = 'idle';

var DEFAULT_TEMPERATURE = 60;

// PoolHeater allows clients to control when the pool is being heated.
function PoolHeater() {
  this.state = IDLE;
  this.currTemperature = DEFAULT_TEMPERATURE;
  this.handle = null;
}

PoolHeater.prototype = new vdl.PoolHeater();

// Status retrieves the PoolHeater's status (i.e., active, idle) and temperature
PoolHeater.prototype.status = function(context, serverCall) {
  return [this.state, this.currTemperature];
};

// Start informs the PoolHeater to heat the pool to the given temperature until
// the duration expires.
PoolHeater.prototype.start =
  function(context, serverCall, temperature, duration) {

  clearTimeout(this.handle); // Clear timeout handle, if any.

  // Begin heating.
  this.state = ACTIVE;
  this.currTemperature = temperature;

  // After duration, stop heating.
  var self = this;
  this.handle = setTimeout(function() {
    self.state = IDLE;
    self.currTemperature = DEFAULT_TEMPERATURE;
  }, duration * 1000);
};

// Stop informs the PoolHeater to cease heating the pool.
PoolHeater.prototype.stop = function(context, serverCall) {
  clearTimeout(this.handle); // Clear timeout handle, if any.

  this.state = IDLE;
  this.currTemperature = DEFAULT_TEMPERATURE;
};