module.exports = function (grunt) {
    "use strict";

    // load all grunt tasks
    require('load-grunt-tasks')(grunt);

    // Default task.
    grunt.registerTask('default', ['jshint', 'jscs', 'karma']);

    // uglify
    grunt.registerTask('minify', ['uglify']);

    //connect - local server
    grunt.registerTask('serve', ['connect']);

    var testConfig = function (configFile, customOptions) {
        var options = {
            configFile : configFile,
            keepalive : true
        };
        var travisOptions = process.env.TRAVIS && {
            browsers : ['Firefox'],
            reporters : 'dots'
        };
        return grunt.util._.extend(options, customOptions, travisOptions);
    };

    // Project configuration.
    grunt.initConfig({
        karma : {
            unit : {
                options : testConfig('test/test.conf.js')
            }
        },
        jshint : {
            files : ['src/**/*.js'],
            options : {
                curly : true,
                devel : true,
                eqeqeq : true,
                forin : true,
                funcscope : true,
                latedef : "nofunc",
                laxbreak : true,
                loopfunc : true,
                maxdepth : 3,
                noarg : true,
                nonbsp : true,
                nonew : true,
                notypeof : true,
                shadow : false,
                browser : true,
                undef : true,
                unused : "vars",
                predef : [],
                globals : {
                    moment : true,
                    angular : true,
                    $ : true,
                    jasmine : true
                }
            }
        },
        jscs : {
            all : [
                ['src/**/*.js']
            ],
            options : {
                config : '.jscsrc'
            }
        },
        uglify : {
            build : {
                src : ['src/**/*.js'],
                dest : 'calendar.min.js'
            }
        },
        connect : {
            server : {
                options : {
                    port : 8000,
                    open : true,
                    debug : true,
                    keepalive : true,
                    hostname : '*',
                    base : ['demo', '.']
                }
            }
        }
    });
};