// jscs:disable requireCamelCaseOrUpperCaseIdentifiers
module.exports = function(grunt) {
    grunt.loadNpmTasks('grunt-sass');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-doctoc');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-jscs');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-protractor-runner');
    grunt.loadNpmTasks('grunt-contrib-connect');
    grunt.loadNpmTasks('grunt-protractor-webdriver');

    grunt.initConfig({
        sass: {
            options: {
                outputStyle: 'expanded'
            },
            dist: {
                files: {
                    'dist/gridstack.css': 'src/gridstack.scss',
                    'dist/gridstack-extra.css': 'src/gridstack-extra.scss'
                }
            }
        },

        cssmin: {
            dist: {
                files: {
                    'dist/gridstack.min.css': ['dist/gridstack.css'],
                    'dist/gridstack-extra.min.css': ['dist/gridstack-extra.css']
                }
            }
        },

        copy: {
            dist: {
                files: {
                    'dist/gridstack.js': ['src/gridstack.js'],
                    'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'],
                }
            }
        },

        uglify: {
            options: {
                sourceMap: true,
                sourceMapName: 'dist/gridstack.min.map',
                preserveComments: 'some'
            },
            dist: {
                files: {
                    'dist/gridstack.min.js': ['src/gridstack.js'],
                    'dist/gridstack.jQueryUI.min.js': ['src/gridstack.jQueryUI.js'],
                    'dist/gridstack.all.js': ['src/gridstack.js', 'src/gridstack.jQueryUI.js']
                }
            }
        },

        doctoc: {
            options: {
                removeAd: false
            },
            readme: {
                options: {
                    target: './README.md'
                }
            },
            doc: {
                options: {
                    target: './doc/README.md'
                }
            },
            faq: {
                options: {
                    target: './doc/FAQ.md'
                }
            },
        },

        jshint: {
            all: ['src/*.js']
        },

        jscs: {
            all: ['*.js', 'src/*.js', ],
        },

        watch: {
            scripts: {
                files: ['src/*.js'],
                tasks: ['uglify', 'copy'],
                options: {
                },
            },
            styles: {
                files: ['src/*.scss'],
                tasks: ['sass', 'cssmin'],
                options: {
                },
            },
            docs: {
                files: ['README.md', 'doc/README.md', 'doc/FAQ.md'],
                tasks: ['doctoc'],
                options: {
                },
            },
        },

        protractor: {
            options: {
                configFile: 'protractor.conf.js',
            },
            all: {}
        },

        connect: {
            all: {
                options: {
                    port: 8080,
                    hostname: 'localhost',
                    base: '.',
                },
            },
        },

        protractor_webdriver: {
            all: {
                options: {
                    command: 'webdriver-manager start',
                }
            }
        }
    });

    grunt.registerTask('default', ['sass', 'cssmin', 'jshint', 'jscs', 'copy', 'uglify', 'doctoc']);
    grunt.registerTask('e2e-test', ['connect', 'protractor_webdriver', 'protractor']);
};