text: 'use strict';
  
  var path = require('path');
  var gulp = require('gulp');
  var conf = require('./conf');
  
  var $ = require('gulp-load-plugins')();
  
  var wiredep = require('wiredep').stream;
  var _ = require('lodash');
  
  var browserSync = require('browser-sync');
  
  gulp.task('inject-reload', ['inject'], function () {
    browserSync.reload();
  });
  
  gulp.task('inject', ['scripts', 'styles', 'injectAuth', 'inject404', 'copyVendorImages'], function () {
    var injectStyles = gulp.src([
      path.join(conf.paths.tmp, '/serve/app/main.css'),
      path.join('!' + conf.paths.tmp, '/serve/app/vendor.css')
    ], {read: false});
  
    var injectScripts = gulp.src([
      path.join(conf.paths.src, '/assets/js/**/*.js'),
      path.join(conf.paths.src, '/app/**/*.module.js'),
      path.join(conf.paths.src, '/app/**/**/*.module.js'),
      path.join(conf.paths.src, '/app/**/*.controller.js'),
      path.join(conf.paths.src, '/app/**/**/*.controller.js'),
      path.join(conf.paths.src, '/app/**/**/**/*.controller.js'),
      path.join(conf.paths.src, '/app/**/*.js'),
      path.join(conf.paths.src, '/app/**/**/*.js'),
      path.join('!' + conf.paths.src, '/app/**/*.spec.js'),
      path.join('!' + conf.paths.src, '/app/**/*.mock.js'),
    ])
      /*.pipe($.angularFilesort())*/.on('error', conf.errorHandler('AngularFilesort'));
  
    var injectOptions = {
      ignorePath: [conf.paths.src, path.join(conf.paths.tmp, '/serve')],
      addRootSlash: false
    };
  
    return gulp.src(path.join(conf.paths.src, '/index.html'))
      .pipe($.inject(injectStyles, injectOptions))
      .pipe($.inject(injectScripts, injectOptions))
      .pipe(wiredep(_.extend({}, conf.wiredep)))
      .pipe(gulp.dest(path.join(conf.paths.tmp, '/serve')));
  });
  
  gulp.task('injectAuth', ['stylesAuth'], function () {
    return injectAlone({
      css: [path.join('!' + conf.paths.tmp, '/serve/app/vendor.css'), path.join(conf.paths.tmp, '/serve/app/auth.css')],
      paths: [path.join(conf.paths.src, '/auth.html'), path.join(conf.paths.src, '/reg.html')]
    })
  });
  
  gulp.task('inject404', ['styles404'], function () {
    return injectAlone({
      css: [path.join('!' + conf.paths.tmp, '/serve/app/vendor.css'), path.join(conf.paths.tmp, '/serve/app/404.css')],
      paths: path.join(conf.paths.src, '/404.html')
    })
  });
  
  var injectAlone = function (options) {
    var injectStyles = gulp.src(
      options.css
      , {read: false});
  
    var injectOptions = {
      ignorePath: [conf.paths.src, path.join(conf.paths.tmp, '/serve')],
      addRootSlash: false
    };
  
    return gulp.src(options.paths)
      .pipe($.inject(injectStyles, injectOptions))
      .pipe(wiredep(_.extend({}, conf.wiredep)))
      .pipe(gulp.dest(path.join(conf.paths.tmp, '/serve')));
  };