const StoreObj = (() => {

    let memStore = {};
    let maxAge = 86400000;

    /**
     * @param {string} uuid
     * @param {object} obj
     */
    const set = (uuid, obj) => {
        memStore[uuid] = {
            obj,
            age: Date.now() + maxAge
        }
    }

    /**
     * @param {string} uuid
     */
    const get = (uuid) => {
        if (uuid in memStore) {
            let s = memStore[uuid];
            if (Date.now() < s.age) {
                s.age = Date.now() + maxAge;
                return s.obj;
            } else {
                delete memStore[uuid];
            }
        }
        return null;
    }

    /**
     * @param {string} uuid
     */
    const chkKey = (uuid) => {
        if (uuid in memStore) return true;
        return false;
    }

    /**
     * @param {string} uuid
     */
    const del = (uuid) => {
        if (uuid in memStore) delete memStore[uuid];
    }

    const clear = () => {
        let t = Date.now();
        for (var i in memStore) {
            let s = memStore[i];
            if (s.age < t) delete memStore[i];
        }
    }

    /**
     * @param {string} uuid if not input return all 
     */
    const show = (uuid) => {
        if (uuid && uuid in memStore) return memStore[uuid];

        return memStore;
    }

    return {set, get, chkKey, clear, del, show };
})()

module.exports = StoreObj;