import { inspectProperty, inspectList } from './helpers'

export default function inspectObject(object, options) {
  const properties = Object.getOwnPropertyNames(object)
  const symbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : []
  if (properties.length === 0 && symbols.length === 0) {
    return '{}'
  }
  options.truncate -= 4
  options.seen = options.seen || []
  if (options.seen.indexOf(object) >= 0) {
    return '[Circular]'
  }
  options.seen.push(object)
  const propertyContents = inspectList(
    properties.map(key => [key, object[key]]),
    options,
    inspectProperty
  )
  const symbolContents = inspectList(
    symbols.map(key => [key, object[key]]),
    options,
    inspectProperty
  )
  options.seen.pop()
  let sep = ''
  if (propertyContents && symbolContents) {
    sep = ', '
  }
  return `{ ${propertyContents}${sep}${symbolContents} }`
}