/*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',
    less: {
      development: {
        src: "less/*.less",
        dest: ".tmp/<%= pkg.name %>.css"
      }
    },
    concat: {
    	js: {
        src: [
          'js/libs/jquery-1.11.0.min.js', // make sure it's first
          'js/libs/*.js',
          'js/libs/jquery.mobile/*.min.js',
          'js/api/*.js',
          'js/*.js',
          // make sure we put main.js last
          '!js/main.js',
          'js/main.js',         
        ],
        dest: 'www/js/<%= pkg.name %>.js'
      },
      less: {
        src: [
          'js/libs/jquery.mobile/jquery.mobile-1.4.2.css',
          'less/*.css',
          '.tmp/<%= pkg.name %>.css'	
        ],
        dest: 'www/css/<%= pkg.name %>.css' /* to css so it's replaced */
      }
    },
    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/<%= pkg.name %>.css',
        dest: 'www/css/<%= pkg.name %>.css'
      }
    },
    cssmin: {
      minify: {
        expand: true,
        cwd: 'www/css/',
        src: ['*.css', '!*.min.css'],
        dest: 'www/css/',
        ext: '.min.css'
      }
    },
    uglify: {
      options: {
//        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
        mangle: true,
        beautify: false,
        compress: {},
//        report: 'min',
        preserveComments: 'some'
      },
      js: {
        files: {
          'www/js/<%= pkg.name %>.min.js' : ['www/js/<%= pkg.name %>.js']
        }
      },
      /*jslibs: {
        cwd: "js/libs/",
//        src: ['js/libs/*.js', '!js/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,
          $: true,
          console: false,
          d3d: true,
          ConnectAPI: true,
          NetworkAPI: true,
          InfoAPI: true,
          ConfigAPI: true
        },
        browser: true,
        curly: true,
        eqeqeq: true,
        immed: true,
        latedef: true,
        newcap: true,
        noarg: true,
        sub: true,
        undef: true,
        unused: false,
        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']
//      }
      src: ['js/**.js'],
    },
    copy: {
      main: {
      	expand: true,
        nonull: true,
        cwd: "js/libs/jquery.mobile/images/",
        src: "**",
        dest: "www/css/images/"
      }
    },
    watch: {
      javascript: {
        files: ["js/**", '!www/js/<%= pkg.name %>.min.js', '!www/js/<%= pkg.name %>.js'],
        tasks: ["jshint", "concat:js", "uglify:js"]
      },
      styles: {
        files: ["less/**"],
        tasks: ["less", "autoprefixer", "concat:less", "cssmin"]
      }
    },
  });

  // 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');
  grunt.loadNpmTasks('grunt-contrib-copy');

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

};
