/* global module */

module.exports = function (grunt) {
    // Project configuration.
    grunt.initConfig({
        config: {
            svn: {
                url: 'https://svn.apache.org/repos/asf/nifi/site/trunk'
            }
        },
        pkg: grunt.file.readJSON('package.json'),
        clean: {
            options: {
                force: true
            },
            js: ['dist/js/*'],
            css: ['dist/css/'],
            assets: ['dist/assets/*'],
            generated: ['dist/docs'],
            all: ['dist']
        },
        assemble: {
            options: {
                assets: 'dist/assets',
                partials: [
                  'src/includes/*.hbs',
                  'src/includes/minifi/*.hbs'
                ],
                layout: ['src/layouts/html.hbs'],
                flatten: true
            },
            html: {
                files: {
                    'dist/': ['src/pages/html/*.hbs'],
                    'dist/minifi': ['src/pages/html/minifi/*.hbs']
                }
            },
            markdown: {
                options: {
                    layout: 'src/layouts/markdown.hbs'
                },
                files: {
                    'dist/': ['src/pages/markdown/*.md']
                }
            },
            minifimarkdown: {
                options: {
                    layout: 'src/layouts/minifi/markdown.hbs'
                },
                files: {
                    'dist/minifi/': ['src/pages/markdown/minifi/*.md']
                }
            },
            minifi: {
              options: {
                  partials: 'src/includes/minifi/*.hbs',
                  layout: 'src/layouts/minifi/minifi-html.hbs'
              },
              files: {
                  'dist/minifi/': [
                    'src/pages/html/minifi/*.hbs'
                  ]
              }
            }
        },
        compass: {
            dist: {
                options: {
                    config: 'config.rb',
                    force: true
                }
            }
        },
        concat: {
            options: {
                separator: ';'
            },
            foundation: {
                src: [
                    'bower_components/foundation/js/foundation/foundation.js',
                    'bower_components/foundation/js/foundation/foundation.topbar.js',
                    'bower_components/foundation/js/foundation/foundation.reveal.js'
                ],
                dest: 'dist/assets/js/foundation.js'
            },
            modernizr: {
                src: [
                    'bower_components/modernizr/modernizr.js'
                ],
                dest: 'dist/assets/js/modernizr.js'
            },
            nifi: {
                src: [
                    'src/js/app.js'
                ],
                dest: 'dist/assets/js/app.js'
            }
        },
        copy: {
//            generated: {
//                files: [{
//                        expand: true,
//                        cwd: '../nifi/nifi-docs/target/generated-docs',
//                        src: ['*.html', 'images/*'],
//                        dest: 'dist/docs/'
//                    }, {
//                        expand: true,
//                        cwd: '../nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api',
//                        src: ['target/nifi-web-api-*/docs/rest-api/index.html', 'target/nifi-web-api-*/docs/rest-api/images/*'],
//                        dest: 'dist/docs/',
//                        rename: function (dest, src) {
//                            var path = require('path');
//
//                            if (src.indexOf('images') > 0) {
//                                return path.join(dest, 'rest-api/images', path.basename(src));
//                            } else {
//                                return path.join(dest, 'rest-api', path.basename(src));
//                            }
//                        }
//                    }]
//            },
            dist: {
                files: [{
                        expand: true,
                        cwd: 'src/images/',
                        src: ['**/*.{png,jpg,gif,svg,ico}'],
                        dest: 'dist/assets/images/'
                    }, {
                        expand: true,
                        cwd: 'bower_components/jquery/dist',
                        src: ['jquery.min.js'],
                        dest: 'dist/assets/js/'
                    }, {
                        expand: true,
                        cwd: 'bower_components/webfontloader',
                        src: ['webfontloader.js'],
                        dest: 'dist/assets/js/'
                    }, {
                        expand: true,
                        cwd: 'bower_components/font-awesome/css',
                        src: ['font-awesome.min.css'],
                        dest: 'dist/assets/stylesheets/'
                    }, {
                        expand: true,
                        cwd: 'bower_components/font-awesome',
                        src: ['fonts/*'],
                        dest: 'dist/assets/'
                    }]
            }
        },
        prompt: {
            username: {
                options: {
                    questions: [{
                            config: 'config.svn.username',
                            type: 'input',
                            message: 'Enter SVN username (if different from current or configured user):'
                    }]
                }
            },
            commit: {
                options: {
                    questions: [{
                            config: 'config.svn.commit.confirmation',
                            type: 'list',
                            choices: ['Show diff', 'Commit', 'Abort'],
                            message: 'Commit the changes listed above?'
                    }],
                    then: function (results) {
                        if (results['config.svn.commit.confirmation'] === 'Commit') {
                            grunt.task.run('prompt:message');
                        } else if (results['config.svn.commit.confirmation'] === 'Show diff') {
                            grunt.task.run('exec:diff');
                            grunt.task.run('prompt:commit');
                        }
                    }
                }
            },
            message: {
                options: {
                    questions: [{
                            config: 'config.svn.commit.message',
                            type: 'input',
                            message: 'Commit message:'
                    }, {
                            config: 'config.svn.password',
                            type: 'password',
                            message: 'SVN password (if different from configured):'
                    }],
                    then: function () {
                        grunt.task.run('exec:add');
                        grunt.task.run('exec:commit');
                    }
                }
            }
        },
        exec: {
            generateDocs: {
                command: 'mvn clean package',
                cwd: '../nifi/nifi-docs',
                stdout: true,
                stderr: true
            },
            generateRestApiDocs: {
                command: 'mvn clean package -DskipTests',
                cwd: '../nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api',
                stdout: true,
                stderr: true
            },
            checkout: {
                command: function() {
                    var url = grunt.config('config.svn.url');
                    var username = grunt.config('config.svn.username');
                    var command = 'svn checkout';
                    if (username !== '') {
                        command += (' --username ' + username);
                    }
                    return command + ' ' + url + ' --trust-server-cert --non-interactive dist';
                },
                stdout: true,
                stderr: true
            },
            status: {
                cwd: 'dist',
                command: 'svn status',
                stdout: true,
                stderr: true
            },
            diff: {
                cwd: 'dist',
                command: 'svn diff',
                stdout: true,
                stderr: true
            },
            add: {
                cwd: 'dist',
                command: 'svn add --force .',
                stdout: true,
                stderr: true
            },
            commit: {
                cwd: 'dist',
                command: function() {
                    var username = grunt.config('config.svn.username');
                    var password = grunt.config('config.svn.password');
                    var message = grunt.config('config.svn.commit.message');
                    var command = 'svn commit';
                    if (username !== '') {
                        command += (' --username ' + username);
                    }
                    if (password !== '') {
                        command += (' --password "' + password + '"');
                    }
                    return command + ' -m "' + message + '" --trust-server-cert --non-interactive .';
                }
            }
        },
        replace: {
            addGoogleAnalytics: {
                src: ['dist/docs/*.html', 'dist/docs/rest-api/index.html'],
                overwrite: true,
                replacements: [{
                        from: /<\/head>/g,
                        to: "<script>\n" +
                                    "(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n" +
                                    "(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n" +
                                    "m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n" +
                                    "})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n" +
                                    "ga('create', 'UA-57264262-1', 'auto');\n" +
                                    "ga('send', 'pageview');\n" +
                                "</script>\n" +
                            "</head>"
                    }]
            },
            moveTearDrop: {
                src: ['dist/docs/rest-api/index.html'],
                overwrite: true,
                replacements: [{
                        from: /<img class="logo" src="images\/bgNifiLogo.png" alt="NiFi Logo"\/>/g,
                        to: '<img class="logo" src="images/bgNifiLogo.png" alt="NiFi Logo" style="float: right;"/>'
                }]
            },
            removeVersion: {
                src: ['dist/docs/rest-api/index.html'],
                overwrite: true,
                replacements: [{
                        from: /<div class="sub-title">.*<\/div>/g,
                        to: '<div class="sub-title">NiFi Rest Api</div>'
                }, {
                        from: /<title>.*<\/title>/g,
                        to: '<title>NiFi Rest Api</title>'
                }]
            }
        },
        watch: {
            grunt: {
                files: ['Gruntfile.js'],
                tasks: ['dev']
            },
            css: {
                files: 'src/scss/*.scss',
                tasks: ['css']
            },
            script: {
                files: 'src/js/*.js',
                tasks: ['js']
            },
            images: {
                files: 'src/images/*.{png,jpg,gif,svg,ico}',
                tasks: ['img']
            },
            assemble: {
                files: ['src/{includes,layouts}/*.hbs', 'src/pages/{html,markdown}/*.{hbs,md}', 'src/{pages,includes,layouts}/**/minifi/*.{hbs,md}'],
                tasks: ['assemble']
            }
        }
    });

    grunt.loadNpmTasks('grunt-newer');
    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-assemble');
    grunt.loadNpmTasks('grunt-contrib-compass');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-exec');
    grunt.loadNpmTasks('grunt-text-replace');
    grunt.loadNpmTasks('grunt-prompt');

    grunt.registerTask('img', ['newer:copy']);
    grunt.registerTask('css', ['clean:css', 'compass']);
    grunt.registerTask('js', ['clean:js', 'concat']);
//    grunt.registerTask('generate-docs', ['clean:generated', 'exec:generateDocs', 'exec:generateRestApiDocs', 'copy:generated', 'replace:addGoogleAnalytics', 'replace:moveTearDrop', 'replace:removeVersion']);

    grunt.registerTask('build', ['assemble', 'css', 'js', 'img', 'copy:dist']);
//    grunt.registerTask('build', ['assemble', 'css', 'js', 'img', 'generate-docs', 'copy:dist']);
    grunt.registerTask('deploy', ['clean:all', 'prompt:username', 'exec:checkout', 'build', 'exec:status', 'prompt:commit']);
    grunt.registerTask('dev', ['default', 'watch']);

    grunt.registerTask('default', ['clean:all', 'build']);
};
