/**
 * @provides javelin-workboard-drop-effect
 * @requires javelin-install
 *           javelin-dom
 * @javelin
 */

JX.install('WorkboardDropEffect', {

  properties: {
    icon: null,
    color: null,
    content: null,
    isTriggerEffect: false,
    isHeader: false,
    conditions: []
  },

  statics: {
    newFromDictionary: function(map) {
      return new JX.WorkboardDropEffect()
        .setIcon(map.icon)
        .setColor(map.color)
        .setContent(JX.$H(map.content))
        .setIsTriggerEffect(map.isTriggerEffect)
        .setIsHeader(map.isHeader)
        .setConditions(map.conditions || []);
    }
  },

  members: {
    newNode: function() {
      var icon = new JX.PHUIXIconView()
        .setIcon(this.getIcon())
        .setColor(this.getColor())
        .getNode();

      var attributes = {};

      if (this.getIsHeader()) {
        attributes.className = 'workboard-drop-preview-header';
      }

      return JX.$N('li', attributes, [icon, this.getContent()]);
    },

    isEffectVisibleForCard: function(card) {
      var conditions = this.getConditions();

      var properties = card.getProperties();
      for (var ii = 0; ii < conditions.length; ii++) {
        var condition = conditions[ii];

        var field = properties[condition.field];
        var value = condition.value;

        var result = true;
        switch (condition.operator) {
          case '!=':
            result = (field !== value);
            break;
        }

        if (!result) {
          return false;
        }
      }

      return true;
    }

  }
});