
###
CLI
###

fs     = require('fs')
path   = require('path')
cmd    = require('commander')
prompt = require('prompt')

_helper = require('./helper')
_config = require('./topsy')
{ version } = require('../../package.json')

trim = (str) -> str.trim()

_init = (project, cmd) ->
  # Make Top-level directory
  try
    fs.mkdirSync(project)
  catch
    console.log "[#{project}] already exists"
    process.exit()

  _config.name = project
  _config.meta.project = project

  opts = ['author', 'email', 'github' ,'git']

  for opt in opts
    if value = cmd[opt]
      if opt is 'git'
        _config[opt] = /true/i.test(value)
      else
        _config.meta[opt] = value

  dest = path.join(process.cwd(), project, 'topsy.json')
  fs.writeFile dest, JSON.stringify(_config, null, 2), (err) ->
    console.log err if err
    console.log "[#{project}] initialized"


module.exports = ->

  cmd
    .version(version)
    .option('-p --project <value>', 'project name', trim)
    .option('-a --author <value>', 'author name', trim)
    .option('-e --email <value>', 'author email', trim)
    .option('-g --github <value>', 'github username', trim)
    .option('-G --git [true/false]', 'init git on generate')

  cmd.on '--help', _helper

  cmd.parse(process.argv)

  if 'init' in cmd.args
    if project = cmd.project
      _init(project, cmd)
    else
      prompt.start()
      prompt.message = ''
      prompt.delimiter = ''
      prompt.get
        name: 'name'
        message: 'Project name: '
        required: true
      , (err, result) ->
        _init(result.name.trim(), cmd)
    false
  else if 'shock' in cmd.args
    return true if fs.existsSync path.join(process.cwd(), 'topsy.json')
    console.log "[topsy.json] not found"
    false

  else
    console.log "  err: invalid arguments"
    cmd.help()
