'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var updateDescendants = require('./updateDescendants.js');
var updateAncestors = require('./updateAncestors.js');
var isEmpty = require('../../../utils/isEmpty.js');
var updateSingleAncestors = require('./updateSingleAncestors.js');

// Пересчитывает мапу checked-состояний согласно value с обновлением родителей и потомков.
var syncCheckedState = function syncCheckedState(value, valueToCheckedMap, valueToItemMap) {
  var checked = new Map(valueToCheckedMap);
  checked.forEach(function (_, key) {
    checked.set(key, false);
  });
  if (Array.isArray(value)) {
    value.forEach(function (currentValue) {
      var currentItem = valueToItemMap.get(currentValue);
      if (!currentItem) {
        return;
      }
      checked.set(currentValue, true);
      updateDescendants.updateDescendants(currentItem, checked, true);
      updateAncestors.updateAncestors(currentItem, checked);
    });
    return checked;
  }
  var currentItem = valueToItemMap.get(value);
  if (!isEmpty.isEmpty(value) && currentItem) {
    checked.set(value, 'done');
    updateSingleAncestors.updateSingleAncestors(currentItem, checked, 'dot');
  }
  return checked;
};

exports.syncCheckedState = syncCheckedState;
