'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.default = undefined;var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}(); // Copyright 2015-2017 Parity Technologies (UK) Ltd.
// This file is part of Parity.

// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity.  If not, see <http://www.gnu.org/licenses/>.

var _store = require('store');var _store2 = _interopRequireDefault(_store);

var _defaultViews = require('../../../config/defaultViews');var _defaultViews2 = _interopRequireDefault(_defaultViews);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}

function initBackground(store, api) {
  var backgroundSeed = loadBackground() || api.util.sha3('' + Date.now());

  store.dispatch({
    type: 'updateBackground',
    backgroundSeed: backgroundSeed });

}

function loadBackground() {
  // Check global object to support embedding
  return _store2.default.get('backgroundSeed') || window.backgroundSeed;
}

function saveBackground(backgroundSeed) {
  _store2.default.set('backgroundSeed', backgroundSeed);
}

function initViews(store) {var _store$getState =
  store.getState(),settings = _store$getState.settings;
  var data = loadViews();
  var viewIds = Object.keys(data).filter(function (viewId) {
    return settings.views[viewId] && data[viewId].active !== settings.views[viewId].active;
  });

  if (viewIds.length) {
    store.dispatch({ type: 'toggleViews', viewIds: viewIds });
  }
}

function getFixedViews() {
  var views = {};

  Object.keys(_defaultViews2.default).forEach(function (id) {
    if (_defaultViews2.default[id].fixed) {
      views[id] = { active: true };
    }
  });

  return views;
}

function getDefaultViews() {
  var views = {};

  Object.keys(_defaultViews2.default).forEach(function (id) {
    views[id] = {
      active: _defaultViews2.default[id].active || false };

  });

  return views;
}

function loadViews() {
  var fixed = getFixedViews();
  var defaults = getDefaultViews();
  var data = void 0;

  try {
    var json = _store2.default.get('views') || {};

    data = Object.assign(defaults, json, fixed);
  } catch (e) {
    data = defaults;
  }

  return data;
}

function saveViews() {
  _store2.default.set('views', getDefaultViews());
}

function toggleViews(viewIds) {
  viewIds.forEach(function (id) {
    _defaultViews2.default[id].active = !_defaultViews2.default[id].active;
  });

  saveViews();
}var

SettingsMiddleware = function () {function SettingsMiddleware() {_classCallCheck(this, SettingsMiddleware);}_createClass(SettingsMiddleware, [{ key: 'toMiddleware', value: function toMiddleware()
    {
      return function (store) {return function (next) {return function (action) {
            switch (action.type) {
              case 'initAll':
                initBackground(store, action.api);
                initViews(store);
                break;

              case 'toggleView':
                toggleViews([action.viewId]);
                break;

              case 'toggleViews':
                toggleViews(action.viewIds);
                break;

              case 'updateBackground':
                saveBackground(action.backgroundSeed);
                break;}


            next(action);
          };};};
    } }]);return SettingsMiddleware;}();exports.default = SettingsMiddleware;