/*
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
*/
var bower = require('./bower.json');

var distPath = 'dist/' + bower.name,
  coveragePath = 'dist-cov/' + bower.name,
  libsFile = 'js/generated/usergrid-libs.min.js',
  devFile = 'js/generated/usergrid-dev.js',
  mainFile = 'js/generated/usergrid.min.js',
  templateFile = 'js/generated-templates/templates.js',
  coverageDir = 'test/coverage/instrument/',
  coverageFile = 'test/coverage/instrument/js/usergrid-coverage.min.js',

  distName = bower.name,
  licenseHeader =
  ' /**\n \
 Licensed to the Apache Software Foundation (ASF) under one\n \
 or more contributor license agreements.  See the NOTICE file\n \
 distributed with this work for additional information \n \
 regarding copyright ownership.  The ASF licenses this file \n\
 to you under the Apache License, Version 2.0 (the \n \
 "License"); you may not use this file except in compliance \n \
 with the License.  You may obtain a copy of the License at \n \
  \n \
 http://www.apache.org/licenses/LICENSE-2.0 \n \
  \n \
 Unless required by applicable law or agreed to in writing,\n \
 software distributed under the License is distributed on an\n \
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n \
 KIND, either express or implied.  See the License for the\n \
 specific language governing permissions and limitations\n \
 under the License.\n \
 */\n';
console.warn(
  'to run e2e tests you need to have a running instance of webdriver, 1) npm install protractor -g -> 2) webdriver-manager start --standalone'
);
module.exports = function(grunt) {


  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    uglify: {
      options: {
        banner: licenseHeader +
          '\n /*! <%= pkg.name %>@<%= pkg.version %>  */\n'
      },
      'usergrid-libs': {
        options: {
          mangle: false,
          compress: {
            warnings: false
          },
          beautify: false
        },
        files: {
          'js/generated/usergrid-libs.min.js': [
            'js/libs/jquery/jquery-1.9.1.min.js',
            'js/libs/jquery/jquery-migrate-1.1.1.min.js',
            'js/libs/jquery/jquery.sparkline.min.js',
            'js/libs/angular-1.2.5/angular.min.js',
            'js/libs/angular-1.2.5/angular-route.min.js',
            'js/libs/angular-1.2.5/angular-resource.min.js',
            'js/libs/angular-1.2.5/angular-sanitize.min.js',
            'js/libs/usergrid.sdk.js',
            'js/libs/MD5.min.js',
            'js/libs/ui-bootstrap/ui-bootstrap-custom-tpls-0.3.0.min.js',
            'js/libs/jqueryui/jquery-ui-1.8.18.min.js',
            'js/libs/jqueryui/date.min.js',
            'bower_components/intro.js/minified/intro.min.js',
            'bower_components/angular-intro.js/src/angular-intro.js',
          ]
        }
      },
      'usergrid-dev': {
        options: {
          mangle: false,
          compress: false,
          beautify: true,
          wrap: true
        },
        files: {
          'js/generated/usergrid-dev.js': [
            'js/app.js',
            'js/**/*.js',
            '!js/config.js',
            '!js/libs/**/*.js',
            '!js/generated/*.js'
          ]
        }
      },
      'usergrid-coverage': {
        options: {
          mangle: false,
          compress: false,
          beautify: false,
          wrap: false
        },
        files: {
          'test/coverage/instrument/js/usergrid-coverage.min.js': [
            coverageDir + 'js/app.js',
            coverageDir + 'js/**/*.js',
            'js/generated-templates/templates.js',
            '!' + coverageDir + 'js/config.js',
            '!' + coverageDir + 'js/libs/**/*.js',
            '!' + coverageDir + 'js/generated/*.js',
            '!' + coverageDir + 'js/usergrid-coverage.min.js'
          ]
        }
      },
      'usergrid-coverage-min': {
        options: {
          mangle: false,
          compress: {
            warnings: false
          },
          beautify: false
        },
        files: {
          'test/coverage/instrument/js/usergrid.min.js': [
            coverageFile
          ]
        }
      },
      'usergrid': {
        options: {
          mangle: false,
          compress: {
            warnings: false
          },
          beautify: false
        },
        files: {
          'js/generated/usergrid.min.js': [
            devFile
          ]
        }
      }

    },
    ngtemplates: {
      "appservices": {
        options: {
          base: 'js/'
        },
        src: ['js/**/*.html', '!**/index*'],
        dest: templateFile,
        options: {
          url: function(url) {
            return url.replace('js/', '');
          }
        }
      }
    },

    cssmin: {
      combine: {
        files: {
          'css/main.min.css': ['css/main.css']
        }
      }
    },
    watch: {
      options: {
        livereload: true
      },
      files: [
        'index-template.html',
        'css/**/*.css',
        'js/**/*.js',
        'js/**/*.html',
        '!tests/',
        '!css/main.min.css',
        '!js/libs/',
        '!js/generated/*.js',
        '!js/generated-templates/*.js',
        'getStatus.js'
      ],
      tasks: ['build-dev']
    },
    connect: {
      server: {
        options: {
          target: 'http://localhost:3000/index-debug.html', // target url to open
          open: 'http://localhost:3000/index-debug.html',
          hostname: '*',
          livereload: true,
          port: 3000,
          base: ''
        }
      },
      'e2e-coverage-chrome': {
        options: {
          port: 3006,
          base: coveragePath
        }
      },
      'e2e-phantom': {
        options: {
          port: 3005,
          base: distPath
        }
      },
      'e2e-chrome': {
        options: {
          port: 3006,
          base: distPath
        }
      },
      'e2e-firefox': {
        options: {
          port: 3007,
          base: distPath
        }
      }
    },
    karma: {
      unit: {
        configFile: 'tests/karma.conf.js',
        runnerPort: 9999,
        singleRun: true,
        browsers: ['PhantomJS']
      },
      coverage: {
        configFile: 'tests/karma-coverage.conf.js',
        runnerPort: 9999,
        singleRun: true,
        browsers: ['PhantomJS']
      }
    },
    protractor: {
      options: {
        configFile: "tests/protractorConf.js", // Default config file
        keepAlive: true, // If false, the grunt process stops when the test fails.
        noColor: false, // If true, protractor will not use colors in its output.
        args: {
          baseUrl: 'http://localhost:3005/'
        }
      },
      phantom: {
        options: {
          args: {
            baseUrl: 'http://localhost:3005/',
            // Arguments passed to the command
            'browser': 'phantomjs'
          }
        }
      },
      chrome: {
        options: {
          args: {
            baseUrl: 'http://localhost:3006/?noHelp=true',
            // Arguments passed to the command
            'browser': 'chrome'
          }
        }
      },
      firefox: {
        options: {
          args: {
            baseUrl: 'http://localhost:3007/',
            // Arguments passed to the command
            'browser': 'firefox'
          }
        }
      }
    },
    copy: {
      coverage: {
        files: [{
          src: ['js/*.min.js', 'js/libs/**', 'sdk/**',
            'js/charts/*.json', 'css/**', 'img/**', 'js/libs/**',
            'config.js', 'bower_components/**'
          ],
          dest: coveragePath,
          expand: true
        }, {
          src: ['js/*.min.js'],
          dest: coveragePath,
          cwd: coverageDir,
          expand: true
        }]
      },
      main: {
        files: [
          // includes files within path
          {
            expand: true,
            src: ['*.html', 'config.js', '*.ico', 'helpJson.json', 'getStatus.js'],
            dest: distPath,
            filter: 'isFile'
          }, {
            expand: true,
            src: ['sdk/**', 'css/**', 'img/**', 'js/charts/*.json'],
            dest: distPath
          }, {
            expand: true,
            src: ['js/generated/**', 'js/libs/**', 'css/**', 'img/**',
              'bower_components/**'
            ],
            dest: distPath
          }

        ]
      }
    },
    clean: {
      build: ['dist/', 'dist-cov/', 'test/', 'js/generated/',
        'js/*.min.js', templateFile, 'index.html', 'index-debug.html'
      ],
      coverage: ['reports/']
    },
    dom_munger: {
      main: {
        options: {
          update: {
            selector: '#main-script',
            attribute: 'src',
            value: mainFile
          }

        },
        src: 'index-template.html', //update the dist/index.html (the src index.html is copied there)
        dest: 'index.html' //update the dist/index.html (the src index.html is copied there)

      },
      dev: {
        options: {
          update: {
            selector: '#main-script',
            attribute: 'src',
            value: devFile
          }
        },
        src: 'index-template.html', //update the dist/index.html (the src index.html is copied there)
        dest: 'index-debug.html' //update the dist/index.html (the src index.html is copied there)
      },
      coverage: {
        options: {
          update: {
            selector: '#main-script',
            attribute: 'src',
            value: 'js/usergrid-coverage.min.js'
          }
        },
        src: 'index-template.html', //update the dist/index.html (the src index.html is copied there)
        dest: coveragePath + '/index.html' //update the dist/index.html (the src index.html is copied there)
      }
    },
    bower: {
      install: {
        options: {
          cleanup: false,

          copy: false
        }
      }
    },
    compress: {
      main: {
        options: {
          mode: 'tar',
          archive: 'dist/' + distName + '.tar'
        },
        expand: true,
        cwd: distPath + '/',
        src: ['**/*'],
        dest: distName + '.' + bower.version
      }
    },

    instrument: {
      files: 'js/**/*.js',
      options: {
        lazy: true,
        basePath: coverageDir
      }
    },
    makeReport: {
      src: 'reports/**/*.json',
      options: {
        type: 'lcov',
        dir: 'reports',
        print: 'detail'
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-contrib-copy');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-connect');
  grunt.loadNpmTasks('grunt-contrib-compress');
  grunt.loadNpmTasks('grunt-contrib-clean');
  grunt.loadNpmTasks('grunt-angular-templates');
  grunt.loadNpmTasks('grunt-bower-task');
  grunt.loadNpmTasks('grunt-contrib-connect');
  grunt.loadNpmTasks('grunt-protractor-runner');
  grunt.loadNpmTasks('grunt-karma');
  grunt.loadNpmTasks('grunt-dom-munger');

  grunt.loadNpmTasks('grunt-istanbul');

  // Default task(s).
  grunt.registerTask('dev', ['connect:server', 'watch']);

  grunt.registerTask('validate', ['jshint', 'complexity']);
  grunt.registerTask('report', ['build', 'coverage']);

  grunt.registerTask('build', ['clean:build', 'bower:install', 'ngtemplates',
    'uglify', 'cssmin', 'dom_munger', 'karma:unit', 'copy'
  ]);
  grunt.registerTask('build-dev', ['build']);
  grunt.registerTask('build-coverage', ['ngtemplates', 'instrument',
    'uglify:usergrid-coverage', 'uglify:usergrid-coverage-min', 'cssmin',
    'dom_munger', 'copy:coverage'
  ]);

  grunt.registerTask('default', ['build']);

  grunt.registerTask('e2e', ['connect:e2e-phantom', 'protractor:phantom']);
  grunt.registerTask('e2e-chrome', ['connect:e2e-chrome', 'protractor:chrome']);
  grunt.registerTask('e2e-coverage', ['clean:coverage',
    'connect:e2e-coverage', 'protractor:coverage'
  ]);
  grunt.registerTask('e2e-coverage-chrome', ['clean:coverage',
    'connect:e2e-coverage-chrome', 'protractor:chrome', 'makeReport'
  ]);
  grunt.registerTask('e2e-firefox', ['connect:e2e-firefox',
    'protractor:firefox'
  ]);
  grunt.registerTask('no-monitoring', ['build', 'clean:perf', 'karma:unit']);

};
