var src = 'src/';
var dest = 'dist/';

var scripts = [
	'src/js/app.js',
	'src/js/controllers.js',
	'src/js/filters.js',
	'src/js/directives.js',
	'src/js/script.js'
];

var vendor = [
	'dist/js/lib/jquery-1.11.3.min.js',
	'dist/js/lib/bootstrap.min.js',
	'dist/js/lib/angular.min.js',
	'dist/js/lib/ngStorage.min.js',
	'dist/js/lib/lodash.min.js',
	'dist/js/lib/d3.min.js',
	'dist/js/lib/d3.tip.min.js',
	'dist/js/lib/topojson.min.js',
	'dist/js/lib/datamaps.min.js',
	'dist/js/lib/moment.min.js',
	'dist/js/lib/moment.en.min.js',
	'dist/js/lib/toastr.min.js',
	'dist/js/lib/jquery.sparkline.min.js',
	'dist/js/lib/primus.min.js'
];

var styles = [
	'bootstrap.min.css',
	'minimal-icons-embedded.css',
	'toastr.min.css',
	'style.css'
];

var src_lite = 'src-lite/';
var dest_lite = 'dist-lite/';

var scripts_lite = [
	'src-lite/js/app.js',
	'src-lite/js/controllers.js',
	'src-lite/js/filters.js',
	'src-lite/js/directives.js',
	'src-lite/js/script.js'
];

var vendor_lite = [
	'dist-lite/js/lib/jquery-1.11.3.min.js',
	'dist-lite/js/lib/bootstrap.min.js',
	'dist-lite/js/lib/angular.min.js',
	'dist-lite/js/lib/lodash.min.js',
	'dist-lite/js/lib/d3.min.js',
	'dist-lite/js/lib/d3.tip.min.js',
	'dist-lite/js/lib/moment.min.js',
	'dist-lite/js/lib/moment.en.min.js',
	'dist-lite/js/lib/toastr.min.js',
	'dist-lite/js/lib/jquery.sparkline.min.js',
	'dist-lite/js/lib/primus.min.js'
];

var styles_lite = [
	'bootstrap.min.css',
	'minimal-icons-embedded.css',
	'toastr.min.css',
	'style.css'
];

module.exports = function(grunt) {
	grunt.initConfig({
		pkg: grunt.file.readJSON('package.json'),
		clean: {
			build: ['dist'],
			cleanup_js: ['dist/js/*.*', '!dist/js/netstats.*'],
			cleanup_css: ['dist/css/*.css', '!dist/css/netstats.*.css'],
			build_lite: ['dist-lite'],
			cleanup_js_lite: ['dist-lite/js/*.*', '!dist-lite/js/netstats.*'],
			cleanup_css_lite: ['dist-lite/css/*.css', '!dist-lite/css/netstats.*.css']
		},
		jade: {
			build: {
				options: {
					data: {
						debug: false,
						pretty: true
					}
				},
				files: {
					'dist/index.html': 'src/views/index.jade'
				}
			},
			build_lite: {
				options: {
					data: {
						debug: false,
						pretty: true
					}
				},
				files: {
					'dist-lite/index.html': 'src-lite/views/index.jade'
				}
			}
		},
		copy: {
			build: {
				files: [
					{
						expand: true,
						cwd: 'src/fonts/',
						src: ['minimal-*.*'],
						dest: 'dist/fonts/',
						filter: 'isFile'
					},
					{
						expand: true,
						cwd: 'src/images/',
						src: ['*.ico'],
						dest: 'dist/',
						filter: 'isFile'
					},
					{
						expand: true,
						cwd: 'src/css/',
						src: styles,
						dest: 'dist/css/',
						filter: 'isFile'
					},
					{
						expand: true,
						cwd: 'src/js/lib/',
						src: ['*.*'],
						dest: 'dist/js/lib'
					}
				]
			},
			build_lite: {
				files: [
					{
						expand: true,
						cwd: 'src-lite/fonts/',
						src: ['minimal-*.*'],
						dest: 'dist-lite/fonts/',
						filter: 'isFile'
					},
					{
						expand: true,
						cwd: 'src-lite/images/',
						src: ['*.ico'],
						dest: 'dist-lite/',
						filter: 'isFile'
					},
					{
						expand: true,
						cwd: 'src-lite/css/',
						src: styles,
						dest: 'dist-lite/css/',
						filter: 'isFile'
					},
					{
						expand: true,
						cwd: 'src-lite/js/lib/',
						src: ['*.*'],
						dest: 'dist-lite/js/lib'
					}
				]
			}
		},
		cssmin: {
			build: {
				files: [{
					expand: true,
					cwd: 'dist/css',
					src: ['*.css', '!*.min.css'],
					dest: 'dist/css/'
				}]
			},
			build_lite: {
				files: [{
					expand: true,
					cwd: 'dist-lite/css',
					src: ['*.css', '!*.min.css'],
					dest: 'dist-lite/css/'
				}]
			}
		},
		concat: {
			vendor: {
				options: {
					sourceMap: true,
					sourceMapIncludeSources: true,
					sourceMapIn: ['dist/js/lib/*.map']
				},
				src: vendor,
				dest: 'dist/js/vendor.min.js'
			},
			scripts : {
				options: {
					separator: ';\n',
				},
				src: scripts,
				dest: 'dist/js/app.js'
			},
			netstats: {
				options: {
					sourceMap: true,
					sourceMapIncludeSources: true,
					sourceMapIn: ['dist/js/vendor.min.js.map', 'dist/js/app.min.js.map']
				},
				src: ['<%= concat.vendor.dest %>', '<%= uglify.app.dest %>'],
				dest: 'dist/js/netstats.min.js',
				nonull: true,
			},
			css: {
				src: ['dist/css/*.min.css', 'dist/css/*.css'],
				dest: 'dist/css/netstats.min.css'
			},
			vendor_lite: {
				options: {
					sourceMap: true,
					sourceMapIncludeSources: true,
					sourceMapIn: ['dist-lite/js/lib/*.map']
				},
				src: vendor_lite,
				dest: 'dist-lite/js/vendor.min.js'
			},
			scripts_lite : {
				options: {
					separator: ';\n',
				},
				src: scripts_lite,
				dest: 'dist-lite/js/app.js'
			},
			netstats_lite: {
				options: {
					sourceMap: true,
					sourceMapIncludeSources: true,
					sourceMapIn: ['dist-lite/js/vendor.min.js.map', 'dist-lite/js/app.min.js.map']
				},
				src: ['<%= concat.vendor_lite.dest %>', '<%= uglify.app_lite.dest %>'],
				dest: 'dist-lite/js/netstats.min.js',
				nonull: true,
			},
			css_lite: {
				src: ['dist-lite/css/*.min.css', 'dist-lite/css/*.css'],
				dest: 'dist-lite/css/netstats.min.css'
			}
		},
		uglify: {
			app: {
				options: {
					mangle: false,
					sourceMap: true,
					sourceMapIncludeSources: true
				},
				dest: 'dist/js/app.min.js',
				src: ['<%= concat.scripts.dest %>']
			},
			app_lite: {
				options: {
					mangle: false,
					sourceMap: true,
					sourceMapIncludeSources: true
				},
				dest: 'dist-lite/js/app.min.js',
				src: ['<%= concat.scripts_lite.dest %>']
			}
		}
	});

	grunt.loadNpmTasks('grunt-contrib-clean');
	grunt.loadNpmTasks('grunt-contrib-copy');
	grunt.loadNpmTasks('grunt-contrib-concat');
	grunt.loadNpmTasks('grunt-contrib-jade');
	grunt.loadNpmTasks('grunt-contrib-cssmin');
	grunt.loadNpmTasks('grunt-contrib-uglify');

	grunt.registerTask('default', ['clean:build', 'clean:cleanup_js', 'clean:cleanup_css', 'jade:build', 'copy:build', 'cssmin:build', 'concat:vendor', 'concat:scripts', 'uglify:app', 'concat:netstats', 'concat:css', 'clean:cleanup_js', 'clean:cleanup_css']);
	grunt.registerTask('lite', ['clean:build_lite', 'clean:cleanup_js_lite', 'clean:cleanup_css_lite', 'jade:build_lite', 'copy:build_lite', 'cssmin:build_lite', 'concat:vendor_lite', 'concat:scripts_lite', 'uglify:app_lite', 'concat:netstats_lite', 'concat:css_lite', 'clean:cleanup_js_lite', 'clean:cleanup_css_lite']);
	grunt.registerTask('build',   'default');
	grunt.registerTask('all',   ['default', 'lite']);
};