
###
Topsy
###

_    = require('lodash')
fs   = require('fs')
path = require('path')
_std = process.stdout

Linespin = require('linespin')

# CLI
_cli = require('./init/commander')

# Tasks
_copy     = require('./tasks/copier')
_walk     = require('./tasks/walker')
_sed      = require('./tasks/sedder')
_git      = require('./tasks/gitter')
_gulp     = require('./tasks/gulper')
_install  = require('./tasks/installer')

# Sanitize
src       = path.join(__dirname, '..', '_boilerplate')
examples  = path.join(__dirname, '..', '_examples')

# Export spark
module.exports = ->

  line = new Linespin('Charging...', 'All done!', 200)

  if do _cli
    do ->
      line.start()
      dest = process.cwd()
      dev  = path.join(dest, '_dev')

      { meta, sed, example, git } = require("#{dest}/topsy")

      line.pending('Boilerplate code copied to [_dev]...')

      _copy(src, dev)
        .then ->
          line.success('Boilerplate code copied to [_dev]...Done')

          return true unless example
          exampleSrc = path.join(examples, example, '_src')
          if fs.existsSync(exampleSrc)
            line.pending("Copying example [#{example}]...")
            _copy exampleSrc, path.join(dev, '_src'), true, ->
              line.success("Copying example [#{example}]...Done")
          else true

        .then ->
          if sed
            line.pending('Searching and replacing placeholder text...')
            _walk dev, _sed _.extend(meta, sed), ->
              line.success('Searching and replacing placeholder text...Done')
          else true

        .then ->
          line.pending('Installing Npm and Bower packages in [_dev]...')
          _install dev, ->
            line.success('Installing Npm and Bower packages in [_dev]...Done')

        .then ->
          if git
            line.pending('Initializing new git repo in [_dev]...')
            _git dev, ->
              line.success('Initializing new git repo in [_dev]...Done')
          else true

        .then ->
          line.pending('Building static site in [_static]...')
          _gulp dev, 'static', ->
            line.success('Building static site in [_static]...Done')

        .done ->
          line.stop()
