/**

* Module AutomaticLogout for JS Files
* @type {[type]}
*/

window.AutomaticLogout = {};

AutomaticLogout.load = function () {

var $regressiveTimer = document.querySelectorAll(".regressive-timer")[0];

if (!!$regressiveTimer && $regressiveTimer.dataset.seconds != "") {
  console.log("[AutomaticLogout] regressiveTimer started");
  AutomaticLogout.regressiveTimer();
}

};

/**

* Send request for destroy session current_user
* @return {[type]} [description]
*/

AutomaticLogout.destroySession = function (message) {

var xhr = new XMLHttpRequest();
xhr.open("GET", "/automatic_logout/destroy", true);

xhr.onload = function () {
  if (xhr.status == 200) {
    var $wrapper = document.querySelectorAll(".regressive-timer")[0];

    if ($wrapper && eval($wrapper.dataset.alert) && message) {
      window.alert(message);
    }

    return (window.location.href = "/");
  }
};
xhr.send();

};

/**

* Method regressive time based in session auto expired at.
* @param  {[type]} date_session [description]
* @return {[type]}              [description]
*/

AutomaticLogout.regressiveTimer = function () {

/**
 * Define o que vai ser impresso no DOM.
 * @param {DOM Object} container
 * @param {Boolean} visible
 * @param {String} textContent
 */
var visibleTimer = function (container, visible, textContent) {
  if (!visible) visible = "false";
  if (!textContent) textContent = "00:00:00";

  if (visible == "true") {
    return (container.textContent = textContent);
  }
};

/**
 * Variables used
 * @param  {[type]} '.regressive-timer' [description]
 * @return {[type]}                     [description]
 */
var $regressiveTimer = document.querySelector(".regressive-timer"),
  data_message = String($regressiveTimer.dataset.message),
  data_seconds = Number($regressiveTimer.dataset.seconds),
  current_time = new Date().getTime();

visibleTimer($regressiveTimer, $regressiveTimer.dataset.visible);

var time_expired = new Date();
time_expired.setSeconds(time_expired.getSeconds() + data_seconds);

if (data_seconds != 0 && data_seconds != "") {
  var timerDecrement = setInterval(function () {
    if (data_seconds == 0) {
      clearInterval(timerDecrement);
      // limpa a sessão após o ok
      AutomaticLogout.destroySession(data_message);
    } else {
      //tempo descrecente
      time_expired.setSeconds(time_expired.getSeconds() - 1);

      var seconds_integer = (time_expired.getTime() - current_time) / 1000,
        date_format = AutomaticLogout.parseDate(seconds_integer),
        output_date_format =
          date_format.hours +
          ":" +
          date_format.minutes +
          ":" +
          date_format.seconds;

      visibleTimer(
        $regressiveTimer,
        $regressiveTimer.dataset.visible,
        output_date_format
      );
    }

    data_seconds -= 1;
  }, 1000);
}

};

/**

* Parse Date
* @param  float seconds seconds_float [description]
* @return {
*   days: days,
*   hours: hours,
*   minutes: minutes,
*   seconds: seconds
* }
*/

AutomaticLogout.parseDate = function (seconds_float) {

var days, hours, minutes, seconds;

days = parseInt(seconds_float / 86400);
seconds_float = seconds_float % 86400;

hours = parseInt(seconds_float / 3600);
seconds_float = seconds_float % 3600;

minutes = parseInt(seconds_float / 60);
seconds = parseInt(seconds_float % 60);

if (hours < 10) {
  hours = "0" + hours;
  hours = hours.substr(0, 2);
}

if (minutes < 10) {
  minutes = "0" + minutes;
  minutes = minutes.substr(0, 2);
}

if (seconds <= 9) {
  seconds = "0" + seconds;
}

return {
  days: days,
  hours: hours,
  minutes: minutes,
  seconds: seconds,
};

};