const serviceUp = {
  icon: document.getElementById("status-up-icon"),
  text: document.getElementById("status-up-text"),
};
const serviceDegraded = {
  icon: document.getElementById("status-degraded-icon"),
  text: document.getElementById("status-degraded-text"),
};
const serviceDown = {
  icon: document.getElementById("status-down-icon"),
  text: document.getElementById("status-down-text"),
};

async function getServicesHealth() {
  const serviceStatus = await fetch(
    "https://status.wah.su/api/status-page/heartbeat/services"
  );

  const services = await serviceStatus.json();
  const heartbeatDict = services.heartbeatList;
  let lastHeartbeats = [];

  for (const [key, value] of Object.entries(heartbeatDict)) {
    lastHeartbeats.push(
      heartbeatDict[key][heartbeatDict[key].length - 1].status
    );
  }

  let status = "up";
  const count = lastHeartbeats.reduce((partialSum, a) => partialSum + a, 0);

  if (count === lastHeartbeats.length) {
    status = "up";
  } else if (count === 0) {
    status = "down";
  } else {
    status = "degraded";
  }

  if (status === "up") {
    serviceUp.icon.classList.remove("hidden");
    serviceUp.text.classList.remove("hidden");
    serviceDegraded.icon.classList.add("hidden");
    serviceDegraded.text.classList.add("hidden");
    serviceDown.icon.classList.add("hidden");
    serviceDown.text.classList.add("hidden");
  } else if (status === "degraded") {
    serviceUp.icon.classList.add("hidden");
    serviceUp.text.classList.add("hidden");
    serviceDegraded.icon.classList.remove("hidden");
    serviceDegraded.text.classList.remove("hidden");
    serviceDown.icon.classList.add("hidden");
    serviceDown.text.classList.add("hidden");
  } else if (status === "down") {
    serviceUp.icon.classList.add("hidden");
    serviceUp.text.classList.add("hidden");
    serviceDegraded.icon.classList.add("hidden");
    serviceDegraded.text.classList.add("hidden");
    serviceDown.icon.classList.remove("hidden");
    serviceDown.text.classList.remove("hidden");
  }
}

getServicesHealth();

setInterval(getServicesHealth, 600000);