var subscribers = {"corpora": [], "jobs": []};


function getCorpora() {
  fetch("/api/v1.0/corpora")
  .then(function(response) {
    if (response.status >= 200 && response.status < 300) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(new Error(response.statusText));
    }
  })
  .then(function(response) {
      return response.json();
  })
  .then(function(data) {
    if (JSON.stringify(corpora) != JSON.stringify(data)) {
      corpora = data;
      for (subscriber of subscribers.corpora) {
        subscriber.corporaUpdateHandler();
      }
    }
  })
  .catch(function(error) {
    console.log('Request failed', error);
  });
}


function getJobs() {
  fetch("/api/v1.0/jobs")
  .then(function(response) {
    if (response.status >= 200 && response.status < 300) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(new Error(response.statusText));
    }
  })
  .then(function(response) {
      return response.json();
  })
  .then(function(json) {
    var delta = jsondiffpatch.diff(jobs, json);
    if (delta) {
      jobs = json;
      for (subscriber of subscribers.jobs) {
        subscriber.jobsUpdateHandler(delta);
      }
    }
  })
  .catch(function(error) {
    console.log('Request failed', error);
  });
}


setInterval(getCorpora, 5000);
setInterval(getJobs, 5000);