/**
 * Eclipse Downloads Grunt File
 *
 * Copyright (c) 2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation)- initial API and implementation
 *    Eric Poirier (Eclipse Foundation)
 */
module.exports = function(grunt) {
    // Initializing the configuration object
    grunt.initConfig({
        // Task configuration
          copy: {
            main: {
                files: [
                // includes files within path
                {
                    expand: true,
                    cwd: 'bower_components/solstice-assets/images/eclipse_org/downloads',
                    src: ['**'],
                    dest: 'public/images/',
                    filter: 'isFile'
                }
                ]
            }
        },
        less: {
            development: {
                options: {
                    compress: true,
                    // minifying the result
                },
                files: {
                    // compiling styles.less into styles.css
                    "./public/stylesheets/downloads.min.css": "./bower_components/solstice-assets/stylesheets/_components/eclipse_org/downloads/downloads.less",
                    "./public/stylesheets/thankyou.min.css": "./bower_components/solstice-assets/stylesheets/_components/eclipse_org/downloads/thankyou.less",
                    "./public/stylesheets/mirror.min.css": "./bower_components/solstice-assets/stylesheets/_components/eclipse_org/downloads/mirror.less"
                }
            }
        },
        concat: {
            options: {
                //separator: ';',
            },
            js_download: {
                src: ['./bower_components/jquery-migrate/jquery-migrate.min.js', './src/javascript/downloads.js', './src/javascript/downloads.js'],
                dest: './public/javascript/downloads.min.js',
            },
            css_thankyou: {
                src: ['./public/stylesheets/thankyou.min.css', './bower_components/jquery-ui/base/minified/jquery-ui.min.css'],
                dest: './public/stylesheets/thankyou.min.css',
            },
            css_download: {
              src: ['./public/stylesheets/downloads.min.css'],
              dest: './public/stylesheets/downloads.min.css',
          },
        },
        uglify: {
            options: {
                mangle: false
                // Use if you want the names of your functions and variables
                // unchanged.
            },
            js_files: {
                files: {
                    './public/javascript/mirror.min.js': './src/javascript/mirror.js',
                    './public/javascript/downloads.min.js': './public/javascript/downloads.min.js'
                }
            },
        },
        watch: {
            js_files: {
                files: [
                './src/javascript/mirror.js', './src/javascript/downloads.js', './src/javascript/compare.js', './src/javascript/packages.js'],
                tasks: ['concat:js_download', 'uglify:js_files']
            },
            less: {
                files: ['./src/stylesheets/**/*.less',
                        './bower_components/solstice-assets/less/*.less',
                        './bower_components/solstice-assets/**/*.less',
                ],
                tasks: ['less','concat'],
                options: {
                    livereload: true
                    // reloads the browser
                }
            },
        }
    });
    // Plugin loading
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    // Task definition
    grunt.registerTask('default', ['watch']);
    grunt.registerTask('init', ['copy','watch']);
};