var angular = require('angular');
require('../modules');
require('./CacheFactory');
var module = angular.module('commons.services');

module.factory('LocalStorage', function() {
  return {
    getItem: function(key) {
      var value = window.localStorage.getItem(key);
      return JSON.parse(value);
    },

    setItem: function(key, value) {
      window.localStorage.setItem(key, JSON.stringify(value));
    },

    removeItem: function(key) {
      window.localStorage.removeItem(key);
    }
  };
});

/**
 * 提供本地存储缓存服务。
 *
 * 采用`window.localStorage`作为本次存储方案。LocalCache操作数据的方法都是异步的，并可以
 * 设置数据获取方法，并自动获取数据并缓存到window.localStorage。
 * 
 * @example
 * var key = 'key';
 * var getterFn = function() {
 *   return $http.get('/common/option/key').then(function(response) {return response.data;});
 * };
 *
 * LocalCache.setGetter('key', getterFn);
 *
 * LocalCache.get('key').then(function(value){
 *   console.log('获取到的值为：', value);
 * });
 *
 * //第二个场景
 * LocalCache.put('key', 'value');
 * LocalCache.get('key').then(function(value) {
 *   console.log('获取到的值为：' + value);
 * });
 */
module.factory('LocalCache', function(CacheFactory, LocalStorage) {
  var LocalCache = CacheFactory.generate(LocalStorage);
  return LocalCache;
});
