module.exports = function(grunt) {

	var staticContentFolder = '../src/main/resources/SLING-INF/libs/sling/resource-editor-static-content';
	var jspFolder = '../src/main/resources/SLING-INF/libs/sling/resource-editor';
	var e2eTestSpecFolder = '../src/test/javascript/e2e/spec/**/*spec.js';
	var server = 'localhost';
	var port = '8080';
	
	grunt.initConfig({
		env : {
		    build : {
		    	PHANTOMJS_BIN: 'node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs',
		    	SLING_SERVER: (typeof process.env.SLING_SERVER === 'undefined' || process.env.SLING_SERVER === null || '' === process.env.SLING_SERVER) ? server : process.env.SLING_SERVER,
		    	SLING_PORT: (typeof process.env.SLING_PORT === 'undefined' || process.env.SLING_PORT === null || '' === process.env.SLING_PORT) ? port : process.env.SLING_PORT
		    }
		},
		'node-inspector': {
		  custom: {
		    options: {
		      'web-port': 5050,
		      'web-host': 'localhost',
		      'debug-port': 5857
		    }
		  }
		},
	    less: {
	      compileCore: {
	        options: {
	          strictMath: true,
	          sourceMap: true,
	          outputSourceFiles: true,
	          sourceMapURL: 'bootstrap.css.map',
	          sourceMapFilename: staticContentFolder+'/generated/css/bootstrap.css.map'
	        },
	        src: '../src/main/less/reseditor.less',
	        dest: staticContentFolder+'/generated/css/bootstrap.css'
	      }
	    }, 
	    watch: {
			less : {
				files : '../src/main/less/**/*.less',
				tasks : [ 'less' ],
			},
			all : {
				files : ['../src/main/less/**/*.less', 
				         '../src/test/javascript/**/*spec.js',
				         staticContentFolder+'/js/**/*.js',
				         jspFolder+'/*.*'
				         ],
				tasks : [ 'desktop_build' ],
			},
			e2e : {
				files : ['../src/main/less/**/*.less', 
				         '../src/test/javascript/**/*spec.js',
				         staticContentFolder+'/js/**/*.js',
				         jspFolder+'/*.*'
				         ],
				tasks : ['env:build', 'webdriver:chrome', 'webdriver:firefox']
			},
			karma : {
				files:[
			            staticContentFolder+'/generated/3rd_party/js/**/*.js',
			            staticContentFolder+'/js/**/*.js',
			            '../src/test/javascript/spec/*spec.js'
				        ],
				tasks: ['karma:desktop_build']
				
			}
	    },
	    _comment:'The google web fonts could be downloaded and copied via grunt-goog-webfont-dl. But goog-webfont-dl directly points to the global #!/usr/bin/env node and not to the local one.',
	    copy: {
	    	js_dependencies: {
		        files: [
		          {
		            expand: true,     // Enable dynamic expansion.
		            cwd: 'node_modules/',      // Src matches are relative to this path.
		            src: [
		                  'bootstrap/dist/js/bootstrap.min.js',
		                  'select2/select2.min.js',
		                  'jquery/dist/jquery.min.js',
		                  'jquery/dist/jquery.min.map',
		                  'bootbox/bootbox.min.js',
		                  'jstree/dist/jstree.min.js',
		                  'bootstrap-notify/dist/bootstrap-notify.min.js'
		                 ], // Actual pattern(s) to match.
		            dest: staticContentFolder+'/generated/3rd_party/js',   // Destination path prefix.
		            flatten: true
		          },
		        ],
		      },
	    	css_dependencies: {
		        files: [
		          {
		            expand: true,     // Enable dynamic expansion.
		            cwd: 'node_modules/',      // Src matches are relative to this path.
		            src: [
		                  'select2/select2.css',
		                  'select2/select2.png',
		                  'select2/select2-spinner.gif',
		                  'animate.css/animate.min.css',
		                  'jstree/dist/themes/default/style.min.css',
		                  'jstree/dist/themes/default/32px.png',
		                  'jstree/dist/themes/default/40px.png',
		                  'jstree/dist/themes/default/throbber.gif',
		                 ], // Actual pattern(s) to match.
		            dest: staticContentFolder+'/generated/3rd_party/css',   // Destination path prefix.
		            flatten: true
		          },
		        ],
		      },
		    font_dependencies: {
		        files: [
		          {
		            expand: true,     // Enable dynamic expansion.
		            cwd: 'node_modules/',      // Src matches are relative to this path.
		            src: [
		                  'bootstrap/fonts/glyphicons-halflings-regular.ttf',
		                  'bootstrap/fonts/glyphicons-halflings-regular.woff2',
		                  'bootstrap/fonts/glyphicons-halflings-regular.woff'
		                 ], // Actual pattern(s) to match.
		            dest: staticContentFolder+'/generated/3rd_party/fonts',   // Destination path prefix.
		            flatten: true
		          },
		        ],
		      }
	    },
	    karma: {
	    	options: {
	    		configFile: 'karma.conf.ci.js',
	    	},  
	    	desktop_build: {
	    	    singleRun: true,
	    	    browsers: ['Chrome', 'Firefox']
	    	},
	    	multi_run: {
	    	    singleRun: false,
	    	    browsers: ['Chrome', 'Firefox']
	    	},
	    	build: {
	    	    singleRun: true,
	    	    browsers: ['PhantomJS']
	    	}
	    },
        webdriver: {
            options: {
            },
            chrome: {
                options: {
                	configFile: 'wdio.conf.js',
                	specs: [e2eTestSpecFolder],
                    // overwrite default settings 
                    desiredCapabilities: {
                        browserName: 'chrome'
                    }
                }
            },
            firefox: {
                options: {
                	configFile: 'wdio.conf.js',
                    specs: [e2eTestSpecFolder],
                    // overwrite default settings 
                    desiredCapabilities: {
                        browserName: 'firefox'
                    },
            		debug: true
                },
            }
        }
	})
	
    // These plugins provide necessary tasks.
    require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });

	grunt.registerTask('setup', ['env:build']);
//	grunt.registerTask('build', ['setup', 'less', 'copy', 'karma:build']);
	grunt.registerTask('build', ['setup', 'less', 'copy']);

	grunt.registerTask('default', ['build']);
	

    grunt.registerTask('desktop_build', ['setup', 'less', 'copy', 'karma:desktop_build'/* doesn't seem to work right now, 'webdriver:chrome', 'webdriver:firefox'*/]);
};