var util = require('util')

var INDENT_START = /[{[]/ var INDENT_END = /[}]]/

module.exports = function() {

var lines = []
var indent = 0

var push = function(str) {
  var spaces = ''
  while (spaces.length < indent*2) spaces += '  '
  lines.push(spaces+str)
}

var line = function(fmt) {
  if (!fmt) return line

  if (INDENT_END.test(fmt.trim()[0]) && INDENT_START.test(fmt[fmt.length-1])) {
    indent--
    push(util.format.apply(util, arguments))
    indent++
    return line
  }
  if (INDENT_START.test(fmt[fmt.length-1])) {
    push(util.format.apply(util, arguments))
    indent++
    return line
  }
  if (INDENT_END.test(fmt.trim()[0])) {
    indent--
    push(util.format.apply(util, arguments))
    return line
  }

  push(util.format.apply(util, arguments))
  return line
}

line.toString = function() {
  return lines.join('\n')
}

line.toFunction = function(scope) {
  var src = 'return ('+line.toString()+')'

  var keys = Object.keys(scope || {}).map(function(key) {
    return key
  })

  var vals = keys.map(function(key) {
    return scope[key]
  })

  return Function.apply(null, keys.concat(src)).apply(null, vals)
}

if (arguments.length) line.apply(null, arguments)

return line

}