var toArray = require('./toArray')

/**
 * Gets the next value on a wrapped object following the
 * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
 *
 * @name next
 * @memberOf _
 * @since 4.0.0
 * @category Seq
 * @returns {Object} Returns the next iterator value.
 * @example
 *
 * var wrapped = _([1, 2]);
 *
 * wrapped.next();
 * // => { 'done': false, 'value': 1 }
 *
 * wrapped.next();
 * // => { 'done': false, 'value': 2 }
 *
 * wrapped.next();
 * // => { 'done': true, 'value': undefined }
 */
function wrapperNext () {
  if (this.__values__ === undefined) {
    this.__values__ = toArray(this.value())
  }
  var done = this.__index__ >= this.__values__.length

  var value = done ? undefined : this.__values__[this.__index__++]

  return { 'done': done, 'value': value }
}

module.exports = wrapperNext
