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

    // Project configuration.
    grunt.initConfig({
        pkg: '<json:package.json>',
        meta: {
            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") %> Nexedi;' +
                ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */'
        },
        concat: {
            dist: {
                src: ['<banner:meta.banner>',
                      // Wrapper top
                      '<file_strip_banner:../../src/<%= pkg.name %>/intro.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/exceptions.js>',
                      // Jio wrapper top
                      '<file_strip_banner:../../src/<%= pkg.name %>/storages/storage.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/storages/storageHandler.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/commands/command.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/commands/getDocumentList.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/commands/loadDocument.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/commands/removeDocument.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/commands/saveDocument.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/status/jobStatus.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/status/doneStatus.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/status/failStatus.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/status/initialStatus.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/status/onGoingStatus.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/status/waitStatus.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/job.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/announcements/announcement.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jio.intro.js>',
                      // Singletons
                      '<file_strip_banner:../../src/<%= pkg.name %>/activityUpdater.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/announcements/announcer.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/jobIdHandler.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/jobManager.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jobs/jobRules.js>',
                      // Jio wrappor bottem
                      '<file_strip_banner:../../src/<%= pkg.name %>/jio.outro.js>',
                      '<file_strip_banner:../../src/<%= pkg.name %>/jioNamespace.js>',
                      // Wrapper bottom
                      '<file_strip_banner:../../src/<%= pkg.name %>/outro.js>'],
                dest: '../../lib/jio/<%= pkg.name %>.js'
            }
        },
        min: {
            dist: {
                src: ['<banner:meta.banner>', '<config:concat.dist.dest>'],
                dest: '../../lib/jio/<%= pkg.name %>.min.js'
            }
        },
        qunit: {
            files: [// '../../test/jiotests.html',
                    '../../test/jiotests_withoutrequirejs.html']
        },
        lint: {
            files: ['grunt.js',
                    '../../lib/jio/<%= pkg.name %>.js']
                    // '../../js/base64.requirejs_module.js',
                    // '../../src/jio.dummystorages.js',
                    // '../../js/jquery.requirejs_module.js',
                    // '../../test/jiotests.js',
                    // '../../test/jiotests.loader.js']
        },
        watch: {
            files: '<config:lint.files>',
            tasks: 'lint qunit'
        },
        jshint: {
            options: {
                curly: true,
                eqeqeq: true,
                immed: true,
                latedef: true,
                newcap: true,
                noarg: true,
                sub: true,
                undef: true,
                boss: true,
                eqnull: true,
                browser: true
            },
            globals: {
                LocalOrCookieStorage: true,
                console: true,
                unescape: true,
                // Needed to avoid "not defined error" with requireJs
                define: true,
                require: true,
                // Needed to avoid "not defined error" with sinonJs
                sinon: true,
                module: true,
                test: true,
                ok: true,
                deepEqual: true,
                expect: true,
                stop: true,
                start: true,
                equal: true
            }
        },
        uglify: {}
    });

    // Default task.
    grunt.registerTask('default', 'concat lint min');

};
