/*global module:false*/
module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    // Metadata.
    pkg: grunt.file.readJSON('package.json'),
    banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
      '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
      '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
      '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
      ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n',
    concat: {
      options: {
//         separator: ';'
      },
      js: {
        src: [
          'js_src/SettingsWindow.js',
          'js_src/UpdatePanel.js',
          'js_src/Help.js',
          'js_src/d3dServerInterfacing.js',
          'js_src/verticalShapes.js',
          'js_src/buttonbehaviors.js',
          'js_src/canvasDrawing.js',
          'js_src/previewRendering.js',
          'js_src/gcodeGenerating.js',
          'js_src/init_layout.js',
          'js_src/Printer.js',
          'js_src/Progressbar.js',
          'js_src/Thermometer.js',
          'js_src/utils.js',
          'js_src/sidebar.js',
          'js_src/Message.js',
          'js_src/main.js'
        ],
        dest: 'www/js/<%= pkg.name %>.js'
      }
    },
    uglify: {
      options: {
//        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
        mangle: true,
        beautify: false,
        compress: {},
//        report: 'min',
        preserveComments: 'false'
      },
      js: {
        files: {
          'www/js/<%= pkg.name %>.min.js' : ['www/js/<%= pkg.name %>.js']
        }
      },
      jslibs: {
        cwd: "js_src/libs/",
//        src: ['js_src/libs/*.js', '!js_src/libs/*.min.js'],  // source files mask
        src: ['*.js', '!*.min.js'],  // source files mask
        dest: 'www/js/libs/',    // destination folder
        expand: true,    // allow dynamic building
        flatten: true,   // remove all unnecessary nesting
        ext: '.min.js'   // replace .js to .min.js
//        files: {
//          'www/js/<%= pkg.name %>.min.js' : ['www/js/<%= pkg.name %>.js']
//        }
      }
    },
    jshint: {
      options: {
        globals: {
          jQuery: true
        },
        browser: true,
        curly: true,
        eqeqeq: true,
        immed: true,
        latedef: true,
        newcap: true,
        noarg: true,
        sub: true,
        undef: true,
        unused: true,
        boss: true,
        eqnull: true
      },
//      gruntfile: {
//        src: 'Gruntfile.js'
//      },
      lib_test: {
        src: ['www/js/*.js', '!www/js/<%= pkg.name %>.js', '!www/js/<%= pkg.name %>.min.js']
      }
    },
    less: {
      development: {
        options: {
          paths: ["www/css"]
        },
        files: {
          "www/css/styles.css": "less/styles.less"
        }
      }
    },
    watch: {
      javascript: {
        files: ["js_src/*", '!www/js/<%= pkg.name %>.min.js', '!www/js/<%= pkg.name %>.js'],
        tasks: ["concat:js", "uglify:js"]
//        tasks: ["jshint", "concat", "uglify"]
      },
      javascriptLibs: {
        files: ["js_src/libs/*"],
        tasks: ["uglify:jslibs"]
//        tasks: ["jshint", "concat", "uglify"]
      },
      styles: {
        files: ["less/*"],
        tasks: ["less", "autoprefixer", "cssmin"]
      }
    },
    autoprefixer: {
      options: {
        browsers: ['> 1%', 'last 2 versions', 'ie 8', 'ie 9', 'ff 17', 'opera 12.1']
      },
      // prefix all specified files and save them separately
      single_file: {
        options: {},
        //        expand: true,
        //        flatten: true,
        src: 'www/css/styles.css', // -> src/css/file1.css, src/css/file2.css
        dest: 'www/css/styles.css' // -> dest/css/file1.css, dest/css/file2.css
      }
    },
    cssmin: {
      minify: {
        expand: true,
        cwd: 'www/css/',
        src: ['*.css', '!*.min.css'],
        dest: 'www/css/',
        ext: '.min.css'
      }
    }
  });

  // These plugins provide necessary tasks.
  grunt.loadNpmTasks('grunt-contrib-less');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-autoprefixer');
  grunt.loadNpmTasks('grunt-contrib-cssmin');

  // Default task.
  grunt.registerTask('default', [
    'less',
    'autoprefixer',
    'cssmin',
    'concat',
    'uglify',
//    'jshint',
    'watch'
  ]);

};
