#!/usr/bin/env coffee

path = require 'path'
fs = require 'fs'
mb = require '../module-bundler'
cli = require 'commander'
Queue = require 'queue-async'

# helpers
timeLog = (message) -> console.log("#{(new Date).toLocaleTimeString()} - #{message}")

extractOptions = (env) ->
  options = {}
  for option_definition in env.options
    option_key = option_definition.long.substring(2)
    options[option_key] = env[option_key] if env.hasOwnProperty(option_key)

  return options

############################
# Command Line Interface
############################
cli
  .version('0.1.1')
  .description('build packages')
  .option('-x, --compress', 'minimize the bundles')
  .parse(process.argv)

options = extractOptions(cli)
options.cwd = fs.realpathSync('.')
args = cli.args

# missing arguments, exit
(console.error('mbundle: missing filename'); process.exit(1)) unless args.length

# bundle each config file
queue = new Queue(1)
for filename in args
  do (filename) -> queue.defer (callback) -> mb.writeBundles filename, options, (err) ->
    timeLog(if err then "mbundle: failed to bundle #{filename}" else "mbundle: bundled #{filename}")
    callback(err)
queue.await (err) -> process.exit(if err then 1 else 0)
