/*! © SpryMedia Ltd - datatables.net/license */

/**
 * It can sometimes be useful to get the average of data in an API result set,
 * be it from a column, or a collection of cells. This method provides exactly
 * that ability.
 *
 * @name average()
 * @summary Average the values in a data set.
 * @author [Allan Jardine](http://sprymedia.co.uk)
 * @requires DataTables 1.10+
 *
 * @returns {Number} Calculated average
 *
 * @example
 *    // Average a column
 *    var table = $('#example').DataTable();
 *    table.column( 3 ).data().average();
 *
 * @example
 *    // Average two cells
 *    var table = $('#example').DataTable();
 *    table.cells( 0, [3,4] ).data().average();
 */

import DataTable from 'datatables.net';

declare module 'datatables.net' {
	interface Api<T> {
		/** Average the values in a data set. */
		average(): Number;
	}
}

DataTable.Api.register<Number>('average()', function () {
	var data = this.flatten();
	var sum = data.reduce(function (a, b) {
		return a * 1 + b * 1; // cast values in-case they are strings
	}, 0);

	return sum / data.length;
});
