/**
 * This updater evenly distributes the value across all records found on the
 * {@link Ext.pivot.result.Base matrix result}.
 *
 * Let's say that the result object contains the following records (each record is a
 * {@link Ext.data.Model model} in fact but we use json representation for this example):
 *
 *      [
 *          { product: 'Phone', country: 'USA', order: 100 },
 *          { product: 'Tablet', country: 'USA', order: 200 }
 *      ]
 *
 * And we want to evenly distribute the value 300 to all orders. This is how the updater config
 * looks like:
 *
 *      {
 *          type: 'uniform',
 *          leftKey: resultLeftKey,
 *          topKey: resultTopKey,
 *          matrix: matrix,
 *          dataIndex: 'order',
 *          value: 300
 *      }
 *
 * And this is how the records look after the update:
 *
 *      [
 *          { product: 'Phone', country: 'USA', order: 150 },
 *          { product: 'Tablet', country: 'USA', order: 150 }
 *      ]
 *
 */
Ext.define('Ext.pivot.update.Uniform', {
    extend: 'Ext.pivot.update.Base',
 
    alias: 'pivotupdate.uniform',
 
    onUpdate: function(result, resolve, reject) {
        // This could fire asynchronously after we've been destroyed
        if (this.destroyed) {
            return;
        }
 
        // eslint-disable-next-line vars-on-top
        var dataIndex = this.getDataIndex(),
            records = result.records,
            value = parseFloat(this.getValue()),
            len, i, avg;
 
        if (isNaN(value)) {
            value = null;
        }
 
        if (records) {
            len = records.length;
 
            if (len > 0) {
                avg = (value === null ? null : (value / len));
 
                for (= 0; i < len; i++) {
                    records[i].set(dataIndex, avg);
                }
            }
        }
 
        this.callParent([result, resolve, reject]);
    }
});