var apply = require('./_apply');

/* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max;

/**

* A specialized version of `baseRest` which transforms the rest array.
*
* @private
* @param {Function} func The function to apply a rest parameter to.
* @param {number} [start=func.length-1] The start position of the rest parameter.
* @param {Function} transform The rest array transform.
* @returns {Function} Returns the new function.
*/

function overRest(func, start, transform) {

start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
return function() {
  var args = arguments,
      index = -1,
      length = nativeMax(args.length - start, 0),
      array = Array(length);

  while (++index < length) {
    array[index] = args[start + index];
  }
  index = -1;
  var otherArgs = Array(start + 1);
  while (++index < start) {
    otherArgs[index] = args[index];
  }
  otherArgs[start] = transform(array);
  return apply(func, this, otherArgs);
};

}

module.exports = overRest;