/* global window, postMessage, textsecure, close */

/* eslint-disable more/no-then, no-global-assign, no-restricted-globals, no-unused-vars */

/*
*  Load this script in a Web Worker to generate new prekeys without
*  tying up the main thread.
*  https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
*
*  Because workers don't have access to the window or localStorage, we
*  create our own version that proxies back to the caller for actual
*  storage.
*
*  Example usage:
*
    var myWorker = new Worker('/js/key_worker.js');
    myWorker.onmessage = function(e) {
        switch(e.data.method) {
            case 'set':
                localStorage.setItem(e.data.key, e.data.value);
                break;
            case 'remove':
                localStorage.removeItem(e.data.key);
                break;
            case 'done':
                console.error(e.data.keys);
        }
    };
*/
let store = {};
window.textsecure.storage.impl = {
  /** ***************************
   *** Override Storage Routines ***
   **************************** */
  put(key, value) {
    if (value === undefined) throw new Error('Tried to store undefined');
    store[key] = value;
    postMessage({ method: 'set', key, value });
  },

  get(key, defaultValue) {
    if (key in store) {
      return store[key];
    }
    return defaultValue;
  },

  remove(key) {
    delete store[key];
    postMessage({ method: 'remove', key });
  },
};
// eslint-disable-next-line no-undef
onmessage = e => {
  store = e.data;
  textsecure.protocol_wrapper.generateKeys().then(keys => {
    postMessage({ method: 'done', keys });
    close();
  });
};
