const server = "https://connect.inboxgo.org/inbox";

async function SignalReceive(username, password) {
  const headers = new Headers({
    Authorization: 'Basic ' + window.btoa(username + ":" + password)
  });

  const response = await fetch(server, {
    method: 'GET',
    cache: 'no-cache',
    headers: headers
  });

  try {
    var data = await response.json();
    const from = response.headers.get("X-From");
    console.log('Received', data);
    return {from: from, data: data};
  } catch(e) {
    return null;
  }
}


async function SignalSend(username, password, to, message) {
  console.log('Sending', message);

  const headers = new Headers({
    Authorization: 'Basic ' + window.btoa(username + ":" + password)
  });

  const response = await fetch(`${server}?to=${to}`, {
    method: 'POST',
    cache: 'no-cache',
    headers: headers,
    body: JSON.stringify(message)
  });
}

var peer;

async function CreateUser() {
  const username = document.getElementById("username").value;
  const password = document.getElementById("password").value;
  let to = document.getElementById("to").value;
  let poll = true;
  document.getElementById("userform").style.display = "none";


  peer = new SimplePeer({ initiator: (to.length > 0) })

  peer.on('signal', data => {
    if ( to.length > 0 ) SignalSend(username, password, to, data);
  })

  peer.on('connect', () => {
    poll = false;
    peer.send('Hello ' + to);
  });

  peer.on('data', data => {
    var p = document.createElement("p");
    p.innerText = data;
    document.getElementById("log").appendChild(p);
  });

  peer.on('error', err => console.log('error', err));

  while ( poll ) {
    try {
      let message = await SignalReceive(username, password);
      to = message.from;
      peer.signal(message.data);
    } catch (e) {
      console.log("didn't receive a message or an error, retrying...", e);
    }
  }
}

function sendMessage() {
  const message = document.getElementById("message").value;
  peer.send(message);
}