function stringifyNode(node, custom) {
  var type = node.type
  var value = node.value
  var buf
  var customResult

  if (custom && (customResult = custom(node)) !== undefined) {
    return customResult
  } else if (type === 'word' || type === 'space') {
    return value
  } else if (type === 'string') {
    buf = node.quote || ''
    return buf + value + (node.unclosed ? '' : buf)
  } else if (type === 'comment') {
    return '/*' + value + (node.unclosed ? '' : '*/')
  } else if (type === 'div') {
    return (node.before || '') + value + (node.after || '')
  } else if (Array.isArray(node.nodes)) {
    buf = stringify(node.nodes, custom)
    if (type !== 'function') {
      return buf
    }
    return value + '(' + (node.before || '') + buf + (node.after || '') + (node.unclosed ? '' : ')')
  }
  return value
}

function stringify(nodes, custom) {
  var result, i

  if (Array.isArray(nodes)) {
    result = ''
    for (i = nodes.length - 1; ~i; i -= 1) {
      result = stringifyNode(nodes[i], custom) + result
    }
    return result
  }
  return stringifyNode(nodes, custom)
}

module.exports = stringify
