var LazyWrapper = require('./_LazyWrapper'),

LodashWrapper = require('./_LodashWrapper'),
reverse = require('./reverse'),
thru = require('./thru');

/**

* This method is the wrapper version of `_.reverse`.
*
* **Note:** This method mutates the wrapped array.
*
* @name reverse
* @memberOf _
* @since 0.1.0
* @category Seq
* @returns {Object} Returns the new `lodash` wrapper instance.
* @example
*
* var array = [1, 2, 3];
*
* _(array).reverse().value()
* // => [3, 2, 1]
*
* console.log(array);
* // => [3, 2, 1]
*/

function wrapperReverse() {

var value = this.__wrapped__;
if (value instanceof LazyWrapper) {
  var wrapped = value;
  if (this.__actions__.length) {
    wrapped = new LazyWrapper(this);
  }
  wrapped = wrapped.reverse();
  wrapped.__actions__.push({
    'func': thru,
    'args': [reverse],
    'thisArg': undefined
  });
  return new LodashWrapper(wrapped, this.__chain__);
}
return this.thru(reverse);

}

module.exports = wrapperReverse;