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

/** Information about a particular status page. */
function StatusPageInfo(statusPageName, statusPageUrl) {
  this.date = '';
  this.inFlight = 0;
  this.jsonUrl = statusPageUrl + 'current?format=json';
  this.message = '';
  this.name = statusPageName;
  this.state = '';
  this.url = statusPageUrl;
}

/** Send and parse an asynchronous request to get a repo status JSON. */
StatusPageInfo.prototype.requestJson = function() {
  if (this.inFlight) return;

  this.inFlight++;
  gNumRequestsInFlight++;

  var statusPageInfo = this;
  var request = new XMLHttpRequest();
  request.open('GET', this.jsonUrl, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      statusPageInfo.inFlight--;
      gNumRequestsInFlight--;

      var statusPageJson = JSON.parse(request.responseText);
      statusPageInfo.date = statusPageJson.date;
      statusPageInfo.message = statusPageJson.message;
      statusPageInfo.state = statusPageJson.general_state;
    }
  };
  request.send(null);
};

/** Creates HTML displaying the status. */
StatusPageInfo.prototype.createHtml = function() {
  var linkElement = document.createElement('a');
  linkElement.href = this.url;
  linkElement.innerHTML = this.name;

  var statusElement = document.createElement('li');
  statusElement.appendChild(linkElement);

  var dateElement = document.createElement('li');
  dateElement.innerHTML = this.date;

  var messageElement = document.createElement('li');
  messageElement.innerHTML = this.message;

  var boxElement = document.createElement('ul');
  boxElement.className = 'box ' + this.state;
  boxElement.appendChild(statusElement);
  boxElement.appendChild(dateElement);
  boxElement.appendChild(messageElement);
  return boxElement;
};