module.exports = function (grunt) {
    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON("package.json"),
        concat: {
            options: {
                separator: ""
            },
            bundleJs: {
                src: [
                    "src/modules/**/*.js",
                    "src/index.js"
                ],
                dest: "dist/bundle.js"
            },
            bundleCss: {
                src: ["src/css/**/*.css"],
                dest: "dist/bundle.css"
            }
        },

        less: {
            main: {
                expand: true,
                cwd: "src/modules",
                src: ["**/*.less"],
                dest: "src/css/",
                ext: ".css"
            },
            dev: {
                options: {
                    compress: true,
                    yuicompress: false
                }
            }
        },

        uglify: {
            options: {
                banner:
                    "/*! <%= pkg.name %> <%= grunt.template.today(\"dd-mm-yyyy\") %> */\n"
            },
            dist: {
                files: {
                    "dist/bundle.min.js": ["<%= concat.bundleJs.dest %>"]
                }
            }
        },

        cssmin: {
            bundleCss: {
                src: "<%= concat.bundleCss.dest %>",

                dest: "dist/bundle.min.css"
            }
        },

        jshint: {
            files: ["src/**/*.js"],
            options: {
                globals: {
                    $: true,
                    jQuery: true,
                    console: true,
                    module: true,
                    document: true
                },
                browser: true,
                expr: true
            }
        },
        watch: {
            scripts: {
                files: ["src/**/*.js", "src/**/*.less"],
                tasks: ["less", "concat"],
                options: {
                    spanw: true,
                    interrupt: true
                }
            },
            livereload: {
                options: {
                    livereload: "<%= connect.options.livereload %>"
                },
                files: ["src/**/*.js", "src/**/*.less"]
            }
        },
        connect: {
            options: {
                port: 9000,
                open: true,
                livereload: 35799,
                // Change this to '0.0.0.0' to access the server from outside
                hostname: "localhost"
            },
            server: {
                options: {
                    port: 9009,
                    base: "./"
                }
            }
        }
    });

    grunt.loadNpmTasks("grunt-contrib-uglify");
    grunt.loadNpmTasks("grunt-contrib-jshint");
    grunt.loadNpmTasks("grunt-contrib-less");
    grunt.loadNpmTasks("grunt-contrib-watch");
    grunt.loadNpmTasks("grunt-contrib-concat");
    grunt.loadNpmTasks("grunt-contrib-cssmin");
    grunt.loadNpmTasks("grunt-contrib-connect");

    grunt.registerTask("default", [
        "jshint",
        "less",
        "concat",
        "connect",
        "watch"
    ]);
    grunt.registerTask("min", ["less", "concat", "uglify", "cssmin"]);
};