// API module.exports = state;

/**

* Creates initial state object
* for iteration over list
*
* @param   {array|object} list - list to iterate over
* @param   {function|null} sortMethod - function to use for keys sort,
*                                     or `null` to keep them as is
* @returns {object} - initial state object
*/

function state(list, sortMethod) {

var isNamedList = !Array.isArray(list)
  , initState =
  {
    index    : 0,
    keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
    jobs     : {},
    results  : isNamedList ? {} : [],
    size     : isNamedList ? Object.keys(list).length : list.length
  }
  ;

if (sortMethod)
{
  // sort array keys based on it's values
  // sort object's keys just on own merit
  initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
  {
    return sortMethod(list[a], list[b]);
  });
}

return initState;

}