'use strict';

const itype = require('itype/legacy');
const jonny = require('jonny/legacy');
const exec = require('execon');
const tryCatch = require('try-catch');
const setItem = localStorage.setItem.bind(localStorage);

/** remove element */
module.exports.remove = (item, callback) => {
    localStorage.removeItem(item);
    exec(callback, null);
    
    return module.exports;
};

module.exports.removeMatch = (string, callback) => {
    const reg = RegExp('^' + string + '.*$');
    const test = (a) => reg.test(a);
    const remove = (a) => localStorage.removeItem(a);
    
    Object.keys(localStorage)
        .filter(test)
        .forEach(remove);
    
    exec(callback);
    
    return module.exports;
};

/** если доступен localStorage и
 * в нём есть нужная нам директория -
 * записываем данные в него
 */
module.exports.set = (name, data, callback) => {
    let str, error;
    
    if (itype.object(data))
        str = jonny.stringify(data);
    
    if (name)
        [error] = tryCatch(setItem, name, str || data);
    
    exec(callback, error);
    
    return module.exports;
},

/** Если доступен Storage принимаем из него данные*/
module.exports.get = (name, callback) => {
    const ret = localStorage.getItem(name);
    
    exec(callback, null, ret);
    
    return module.exports;
},

/** функция чистит весь кэш для всех каталогов*/
module.exports.clear = (callback) => {
    localStorage.clear();
    
    exec(callback);
    
    return module.exports;
};

