/*
 * vim: ts=4:sw=4:expandtab
 */

'use strict';

/*
*  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.log(e.data.keys);
        }
    };
*/
var store = {};
window.textsecure.storage.impl = {
    /*****************************
    *** Override Storage Routines ***
    *****************************/
    put: function(key, value) {
        if (value === undefined)
            throw new Error("Tried to store undefined");
        store[key] = value;
        postMessage({method: 'set', key: key, value: value});
    },

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

    remove: function(key) {
        delete store[key];
        postMessage({method: 'remove', key: key});
    },
};
onmessage = function(e) {
    store = e.data;
    textsecure.protocol_wrapper.generateKeys().then(function(keys) {
        postMessage({method: 'done', keys: keys});
        close();
    });
}