(function () {

	'use strict';

	var gulp = require('gulp');
	var del = require('del');
	var config = require('./gulp.config');
	var console = require('gulp-messenger');
	var stripDebug = require('gulp-strip-debug');
	var handleErrors = require('./utils/handleErrors');

	console.init({
		timestamp: true,
		logToFile: false,
		showPipeFile: false
	});

	gulp.task('clean:scripts', function (cb) {
		del(config.app.dest);
		console.success(config.css.dest + ' Cleaned...');
	});

	gulp.task('clean:styles', function (cb) {
		del(config.css.dest);
		console.success(config.css.dest + ' Cleaned...');
	});

	gulp.task('clean:logs', function (cb) {
		del('./logs');
		console.success('./logs Cleaned...');
	});

	gulp.task('clean:all', ['clean:scripts', 'clean.styles', 'clean:logs']);

	gulp.task('clean:console', function () {
		return gulp.src(['./test/test2.js'])
			.on('error', handleErrors)
			.pipe(stripDebug())
			.pipe(gulp.dest('test'));
	});


})();
// BABELIFY TASK
// =============================================================================

import gulp         from 'gulp'
import msg          from 'gulp-messenger'
import eslint       from 'gulp-eslint'
import config       from './gulp.config'
import temp         from 'cd-utils'
import handleErrors  from './utils/handleErrors'

let utils = temp({});

msg.init({showPipeFile: false, timestamp: true})

gulp.task('eslint', () => {
	let files = [].concat(config.scripts.src, config.scripts.main, config.lint.src)

	return gulp.src(config.lint.src)
		.on('error', handleErrors)
		.pipe(eslint())
		.pipe(eslint.format())
		.pipe(eslint.failAfterError())
		.pipe(msg.flush.note('*** Linting Scripts [babel-eslint]: ' + utils.ellipsis(files.toString(),30)));
});

gulp.task('lint', ['eslint']);
// MOCHA TASK
// =============================================================================

import gulp  from 'gulp'
import msg   from 'gulp-messenger'
import shell from 'shelljs'

msg.init({timestamp: true, showPipeFile: true})

let testOptions = {
  src:      'specs/**/*Spec.js',
  reporter: 'mocha-unfunk-reporter',
  compiler: 'js:babel-core/register specs/.setup.js'
}

gulp.task('test:mocha', () => {
  msg.note('*** Testing In Progress...')
  shell.exec(`mocha --compilers ${testOptions.compiler} --reporter ${testOptions.reporter} ${testOptions.src}`)
  msg.success('*** Testing Operation Complete ***')
  console.log('\n');
})

gulp.task('test',['test:mocha'])