window.setImmediate = window.nodeSetImmediate;

const getKeysForNumberMap = {};
const messagesSentMap = {};

const fakeCall = () => Promise.resolve();

const fakeAPI = {
  confirmCode: fakeCall,
  getAttachment: fakeCall,
  getAvatar: fakeCall,
  getDevices: fakeCall,
  // getKeysForNumber: fakeCall,
  getMessageSocket: fakeCall,
  getMyKeys: fakeCall,
  getProfile: fakeCall,
  getProvisioningSocket: fakeCall,
  putAttachment: fakeCall,
  registerKeys: fakeCall,
  requestVerificationSMS: fakeCall,
  requestVerificationVoice: fakeCall,
  // sendMessages: fakeCall,
  setSignedPreKey: fakeCall,

  getKeysForNumber(number) {
    const res = getKeysForNumberMap[number];
    if (res !== undefined) {
      delete getKeysForNumberMap[number];
      return Promise.resolve(res);
    }
    throw new Error('getKeysForNumber of unknown/used number');
  },

  sendMessages(destination, messageArray) {
    for (let i = 0, max = messageArray.length; i < max; i += 1) {
      const msg = messageArray[i];
      if (
        (msg.type !== 1 && msg.type !== 3) ||
        msg.destinationDeviceId === undefined ||
        msg.destinationRegistrationId === undefined ||
        msg.body === undefined ||
        msg.timestamp === undefined ||
        msg.relay !== undefined ||
        msg.destination !== undefined
      ) {
        throw new Error('Invalid message');
      }

      messagesSentMap[
        `${destination}.${messageArray[i].destinationDeviceId}`
      ] = msg;
    }
  },
};

window.WebAPI = {
  connect: () => fakeAPI,
};