
###
Copier
###

Q    = require('q')
fs   = require('fs')
cp   = require('wrench')
path = require('path')

module.exports = (src, dest, force=false, callback) ->

  deferred = Q.defer()

  opts =
    forceDelete: force
    exclude: /^\.(git|sass)/

  args = [src, dest, opts]

  resolveAndCallback = ->
    deferred.resolve(copier: true)
    do callback if callback

  Q(cp.copyDirSyncRecursive.apply null, args).then ->
    gitignore = path.join(dest,'_gitignore')
    if fs.existsSync(gitignore)
      fs.rename gitignore, path.join(dest,'.gitignore'), (err) ->
        do resolveAndCallback
    else
      do resolveAndCallback

  deferred.promise
