/*global module */
module.exports = function(grunt) {
    'use strict';

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        banner: '/*!\n * Peppermint touch slider\n * v. <%= pkg.version %> | <%= pkg.homepage %>\n * Copyright <%= pkg.author.name %> | <%= pkg.author.url %>\n *\n * Depends on Event Burrito (included) | https://github.com/wilddeer/Event-Burrito\n * MIT License\n */\n',
        bannerPure: '/*!\n * Peppermint touch slider\n * v. <%= pkg.version %> | <%= pkg.homepage %>\n * Copyright <%= pkg.author.name %> | <%= pkg.author.url %>\n *\n * Depends on Event Burrito | https://github.com/wilddeer/Event-Burrito\n * MIT License\n */\n',
        uglify: {
            options: {
                mangle: {
                    except: ['Peppermint', '$', 'jQuery', 'EventBurrito']
                }
            },
            peppermint: {
                files: {
                    'temp/peppermint.min.js': ['src/peppermint.js']
                }
            },
            burrito: {
                files: {
                    'temp/eventburrito.min.js': ['src/burrito/eventburrito.js']
                }
            }
        },

        concat: {
            options: {
                banner: '<%= banner %>',
                separator: '\n'
            },
            full: {
                src: ['src/peppermint.js','src/burrito/eventburrito.js'],
                dest: 'dist/peppermint.js',
            },
            min: {
                src: ['temp/peppermint.min.js','temp/eventburrito.min.js'],
                dest: 'dist/peppermint.min.js',
            },
            pureFull: {
                options: {
                    banner: '<%= bannerPure %>'
                },
                src: ['src/peppermint.js'],
                dest: 'dist/pure/peppermint.pure.js'
            },
            pureMin: {
                options: {
                    banner: '<%= bannerPure %>'
                },
                src: ['temp/peppermint.min.js'],
                dest: 'dist/pure/peppermint.pure.min.js'
            },
            cssRequired: {
                options: {
                    banner: '/* Peppermint minimal required styles */\n\n'
                },
                src: ['src/peppermint.required.css'],
                dest: 'dist/peppermint.required.css'
            },
            cssSuggested: {
                options: {
                    banner: '/* Peppermint required styles + default appearance styles */\n\n',
                    separator: '\n\n/* default appearance styles */\n'
                },
                src: ['src/peppermint.required.css', 'src/peppermint.appearance.css'],
                dest: 'dist/peppermint.suggested.css'
            }
        },

        bump: {
            options: {
                files: ['package.json', 'bower.json'],
                updateConfigs: ['pkg'],
                commit: true,
                commitMessage: 'tagging v. %VERSION%',
                commitFiles: ['.'],
                createTag: true,
                tagName: '%VERSION%',
                tagMessage: 'tagging v. %VERSION%',
                push: false
            }
        },

        shell: {
            push: {
                command: 'git push'
            },

            pushTags: {
                command: 'git push --tags'
            }
        },

        watch: {
            files: ['src/**/*.js', 'src/**/*.css', 'package.json'],
            tasks: ['build']
        },
    });

    // build
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-bump');
    grunt.loadNpmTasks('grunt-shell');
    grunt.registerTask('build', ['uglify', 'concat']);
    grunt.registerTask('release', ['bump-only:patch', 'uglify', 'concat', 'bump-commit', 'shell:push', 'shell:pushTags']);
    grunt.registerTask('w', ['build', 'watch']);
    grunt.registerTask('default', 'build');
};
