// i deeply apologize for the horrors within...
const ntfyEndpoint = "https://ntfy.ouroboros.group/beep";
const meowEndpoint = "https://ntfy.ouroboros.group/meow";

const ntfyMessage = document.getElementById("ntfy-message");
const ntfyTitle = document.getElementById("ntfy-title");
const ntfyAttach = document.getElementById("ntfy-attach");
const ntfyClickAction = document.getElementById("ntfy-click");
const ntfyButton = document.getElementById("ntfy-button");
const meowButton = document.getElementById("meow-button");

const optionsCheck = document.getElementById("optionsCheckbox");
const titleCheck = document.getElementById("titleCheckbox");
const attachmentCheck = document.getElementById("attachmentCheckbox");
const clickCheck = document.getElementById("clickCheckbox");

const titleBoxLabel = document.getElementById("titleBoxLabel");
const attachmentBoxLabel = document.getElementById("attachBoxLabel");
const clickBoxLabel = document.getElementById("clickBoxLabel");
const justMeowed = document.getElementById("justMeowed");

const optionsEnabled = sessionStorage.getItem("optionsEnabled");
const titleEnabled = sessionStorage.getItem("optionsEnabled");
const attachmentEnabled = sessionStorage.getItem("optionsEnabled");
const clickEnabled = sessionStorage.getItem("optionsEnabled");

const titlePFX = "title: ";
const msgPFX = "message: ";
const attachPFX = "attachment: ";
const clickPFX = "click-action: ";

// Random placeholder
function getPlaceholder() {
  placeholderSelector = Math.floor(Math.random() * 8) + 1;
  switch (placeholderSelector) {
    case 1:
      ntfyTitle.placeholder = `${titlePFX}hey there`;
      ntfyMessage.placeholder = `${msgPFX}hi nelle! (。>﹏<。)`;
      break;
    case 2:
      ntfyTitle.placeholder = `${titlePFX}fuck you`;
      ntfyMessage.placeholder = `${msgPFX}(╹◡╹)凸`;
      break;
    case 3:
      ntfyTitle.placeholder = `${titlePFX}confession of sin`;
      ntfyMessage.placeholder = `${msgPFX}I dont like SciAdv`;
      break;
    case 4:
      ntfyTitle.placeholder = `${titlePFX}a funny joke`;
      ntfyMessage.placeholder = `${msgPFX}Knock Knock...`;
      break;
    case 5:
      ntfyTitle.placeholder = `${titlePFX}yes, its me`;
      ntfyMessage.placeholder = `${msgPFX}El. Psy. Kongroo.`;
      break;
    case 6:
      ntfyTitle.placeholder = `${titlePFX}SDXc^73hce1!3&`;
      ntfyMessage.placeholder = `${msgPFX}we're watching you.`;
      break;
    case 7:
      ntfyTitle.placeholder = `${titlePFX}haiiii :3`;
      ntfyMessage.placeholder = `${msgPFX}you wouldnt happen to know where an IBN5100 is, would you?`;
      break;
    case 8:
      ntfyTitle.placeholder = `${titlePFX}an important question`;
      ntfyMessage.placeholder = `${msgPFX}if you had to choose, between: bacon, unlimited bacon, but no games. or. games. unlimited games, but no games. which would you pick?`;
      break;
    case 9:
      ntfyTitle.placeholder = `${titlePFX}query`;
      ntfyMessage.placeholder = `${msgPFX}time travel?`;
      break;
    default:
      ntfyTitle.placeholder = `${titlePFX}title the message for some reason?`;
      ntfyMessage.placeholder = `${msgPFX}type some words and hit send.`;
      ntfyAttach.placeholder = `${attachPFX}https://http.cat/images/100.jpg`;
      ntfyClickAction.placeholder = `${clickPFX}https://www.youtube.com/watch?v=dQw4w9WgXcQ`;
  }
}

function checkBoxes() {
  if (optionsEnabled) {
    optionsCheck.checked = true;
    toggleOptions();
  }
  if (titleEnabled) {
    titleCheck.checked = true;
    toggleTitle();
  }
  if (attachmentEnabled) {
    attachmentCheck.checked = true;
    toggleAttach();
  }
  if (clickEnabled) {
    clickCheck.checked = true;
    toggleClick();
  }
}
function toggleOptions() {
  if (optionsCheck.checked) {
    sessionStorage.setItem("optionsEnabled", 1);
    titleBoxLabel.style.display = "initial";
    attachmentBoxLabel.style.display = "initial";
    clickBoxLabel.style.display = "initial";
    titleCheck.style.display = "initial";
    attachmentCheck.style.display = "initial";
    clickCheck.style.display = "initial";
  }
  if (!optionsCheck.checked) {
    sessionStorage.removeItem("optionsEnabled");
    titleBoxLabel.style.display = "none";
    attachmentBoxLabel.style.display = "none";
    clickBoxLabel.style.display = "none";
    titleCheck.style.display = "none";
    attachmentCheck.style.display = "none";
    clickCheck.style.display = "none";
  }
}
function toggleTitle() {
  if (titleCheck.checked) {
    sessionStorage.setItem("titleEnabled", 1);
    ntfyTitle.style.display = "initial";
  }
  if (!titleCheck.checked) {
    sessionStorage.removeItem("titleEnabled");
    ntfyTitle.style.display = "none";
  }
}
function toggleAttach() {
  if (attachmentCheck.checked) {
    sessionStorage.setItem("attachmentEnabled", 1);
    ntfyAttach.style.display = "initial";
  }
  if (!attachmentCheck.checked) {
    sessionStorage.removeItem("attachmentEnabled");
    ntfyAttach.style.display = "none";
  }
}
function toggleClick() {
  if (clickCheck.checked) {
    sessionStorage.setItem("clickEnabled", 1);
    ntfyClickAction.style.display = "initial";
  }
  if (!clickCheck.checked) {
    sessionStorage.removeItem("clickEnabled");
    ntfyClickAction.style.display = "none";
  }
}

// on send button click
async function meowClick() {  meowButton.disabled=true;
  setTimeout('meowButton.disabled=false;',11000);
  meowButton.innerHTML = "<span>Sent! :3</span>";
  sendNone(meowEndpoint, "meow");
  setTimeout(() => {
    meowButton.innerHTML = "<span>cooldown 10s</span>";
    setTimeout(() => {
      meowButton.innerHTML = "<span>cooldown 9s</span>";
      setTimeout(() => {
        meowButton.innerHTML = "<span>cooldown 8s</span>";
        setTimeout(() => {
          meowButton.innerHTML = "<span>cooldown 7s</span>";
          setTimeout(() => {
            meowButton.innerHTML = "<span>cooldown 6s</span>";
            setTimeout(() => {
              meowButton.innerHTML = "<span>cooldown 5s</span>";
              setTimeout(() => {
                meowButton.innerHTML = "<span>cooldown 4s</span>";
                setTimeout(() => {
                  meowButton.innerHTML = "<span>cooldown 3s</span>";
                  setTimeout(() => {
                    meowButton.innerHTML = "<span>cooldown 2s</span>";
                    setTimeout(() => {
                      meowButton.innerHTML = "<span>cooldown 1s</span>";
                      setTimeout(() => {
                        meowButton.innerHTML = "<span>meow</span>";
                      }, 1000);
                    }, 1000);
                  }, 1000);
                }, 1000);
              }, 1000);
            }, 1000);
          }, 1000);
        }, 1000);
      }, 1000);
    }, 1000);
  }, 1000);
}

// on send button click
async function ntfyClick() {
  if (!ntfyMessage.value.replace(/\s/g, "").length) {
    ntfyButton.innerHTML = "<span>ಠ﹏ಠ</span>";
    setTimeout(() => {
      ntfyButton.innerHTML = "<span>Send</span>";
      return;
    }, 1000);
  } else {
    ntfyButton.innerHTML = "<span>Sent! ( ꈍᴗꈍ)</span>";
    sendNotification();
    setTimeout(() => {
      ntfyButton.innerHTML = "<span>Send</span>";
    }, 1000);
  }
}

// only message
function sendNone(endpoint, message) {
  const r = new XMLHttpRequest();
  r.open("POST", endpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.send(message);
}
// send all
function sendAll(title, message, attachment, click) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Title", title);
  r.setRequestHeader("Attach", attachment);
  r.setRequestHeader("Click", click);
  r.send(message);
}
// send title only
function sendTitle(title, message) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Title", title);
  r.send(message);
}
// send attachment only
function sendAttach(message, attachment) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Attach", attachment);
  r.send(message);
}
// send click only
function sendClick(message, click) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Click", click);
  r.send(message);
}
// send Title & Attachment
function sendTitleAttach(title, message, attachment) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Title", title);
  r.setRequestHeader("Attach", attachment);
  r.send(message);
}
// send Title & Click
function sendTitleClick(title, message, click) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Title", title);
  r.setRequestHeader("Click", click);
  r.send(message);
}
// send Attach & Click
function sendAttachClick(message, attachment, click) {
  const r = new XMLHttpRequest();
  r.open("POST", ntfyEndpoint, true);
  r.setRequestHeader("Content-Type", "text/plain");
  r.setRequestHeader("Attach", attachment);
  r.setRequestHeader("Click", click);
  r.send(message);
}

// send notification
function sendNotification() {
  // title only
  if (titleEnabled && !attachmentEnabled && !clickEnabled) {
    sendTitle(ntfyTitle.value, ntfyMessage.value);
    ntfyTitle.value = "";
    ntfyMessage.value = "";
  }
  // attachment only
  if (!titleEnabled && attachmentEnabled && !clickEnabled) {
    sendAttach(ntfyMessage.value, ntfyAttach.value);
    ntfyMessage.value = "";
    ntfyAttach.value = "";
  }
  // click only
  if (!titleEnabled && !attachmentEnabled && clickEnabled) {
    sendClick(ntfyMessage.value, ntfyClickAction.value);
    ntfyMessage.value = "";
    ntfyClickAction.value = "";
  }
  // title & attachment
  if (titleEnabled && attachmentEnabled && !clickEnabled) {
    sendTitleAttach(ntfyTitle.value, ntfyMessage.value, ntfyAttach.value);
    ntfyTitle.value = "";
    ntfyMessage.value = "";
    ntfyAttach.value = "";
  }
  // title & click
  if (titleEnabled && !attachmentEnabled && clickEnabled) {
    sendTitleClick(ntfyTitle.value, ntfyMessage.value, ntfyClickAction.value);
    ntfyTitle.value = "";
    ntfyMessage.value = "";
    ntfyClickAction.value = "";
  }
  // attachment & click
  if (!titleEnabled && attachmentEnabled && clickEnabled) {
    sendAttachClick(ntfyMessage.value, ntfyAttach.value, ntfyClickAction.value);
    ntfyAttach.value = "";
    ntfyMessage.value = "";
    ntfyClickAction.value = "";
  }
  // all three
  if (titleEnabled && attachmentEnabled && clickEnabled) {
    sendAll(
      ntfyTitle.value,
      ntfyMessage.value,
      ntfyAttach.value,
      ntfyClickAction.value
    );
    ntfyTitle.value = "";
    ntfyMessage.value = "";
    ntfyAttach.value = "";
    ntfyClickAction.value = "";
  }
  // none
  else {
    sendNone(ntfyEndpoint, ntfyMessage.value);
    ntfyMessage.value = "";
  }
}