import toArguments from '../../NATIVE/builtin/toArguments'
import fromKeyValueToIterator from '../../iterator/cast/fromKeyValueToIterator'
/**
* @TODO @FIXME @HACK @POLYFILL #js - strip on prod
* @see is/arguments
* @see cast/argumentsToArray
* @see cast/toArguments
*
* @since 5.0.0-beta.9
* @name makeMockArguments
*
* @param {*} x anything to mock
* @return {Arguments} mock
* @example makeMockArguments() //=> Iterator
*/
const MockArguments = toArguments('Arguments')
/**
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
* @return {Iterator} mock
* @example makeMockIterator() //=> Iterator
*/
const MockIterator = fromKeyValueToIterator(['Iterator', 'Iterator', 1])
MockIterator[Symbol.toStringTag] = 'Iterator'
export { MockArguments, MockIterator }
// @NOTE commented out because toArguments
// is shorter and more accurate but this gives some insight
// maybe someone wants to make a `Type` out of it
//
// const arrayToIterator = require('chaintools/deps/cast/arrayToIterator')
// const toKey = require('chaintools/deps/cast/toKey')
// const values = require('chaintools/deps/util/values')
// const keys = require('chaintools/deps/util/keys')
// const isObj = require('chaintools/deps/is/obj')
//
// const makeMockArguments = x => {
// const MockArguments = {
// __proto__: arguments,
// [Symbol.toStringTag]: 'Arguments',
// toString() {
// return '[Object Arguments]'
// },
// }
// MockArguments[Symbol.iterator] = function() {
// return arrayToIterator(values(MockArguments))
// }
//
// if (isObj(x)) {
// const objKeys = keys(x)
// MockArguments.length = objKeys(x).length
//
// let index = 0
// objKeys.forEach(key => (MockArguments[toKey(index++)] = x[key]))
// }
// MockArguments.prototype = MockArguments
// return MockArguments
// }
// const makeMockIterator = () => {
// const GenericIterator = {
// value: undefined,
// first: true,
// done: false,
// next() {},
// toString() {
// return '[Object Iterator]'
// },
// [Symbol.toStringTag]: 'Iterator',
// [Symbol.iterator](eh) {
// return arrayToIterator(values(this))
// },
// }
// GenericIterator.prototype = GenericIterator
// return GenericIterator
// }
//
// module.exports = {makeMockIterator, makeMockArguments}