var angular = require('angular'),
  _ = require('jsUtil');
require('../modules');

angular
 .module('commons.services')
 .factory('CacheService', CacheService);

/** @ngInject */
function CacheService() {
  var cache = {
    put: put,
    get: get,
    remove: remove
  };

  function put(key, value) {
    var jsonValue = JSON.stringify(value);
    localStorage.setItem(key, jsonValue);
  }

  /**
   * 从缓存中获取，有默认值时，当缓存中没有值时，返回默认值，否则，返回null
   *               没有默认值时，当缓存中没有值时，返回null。
   * @param  {String} key
   * @param  {String} defaultValue 默认值
   * @return {}
   */
  function get(key, defaultValue) {
    var value = localStorage.getItem(key);
    if(value === 'undefined') {
      return ;
    } else if(!_.isEmpty(value)) {
      try {
        return JSON.parse(value);
      } catch (e) {
        put(key, value);
        return value;
      }
    } else {
      return !defaultValue? value : defaultValue;
    }
  }

  /**
   * 删除一项
   * @param  {String} key
   */
  function remove(key) {
    localStorage.removeItem(key);
  }

  return cache;
}
