import gulp from 'gulp';
import concat from 'gulp-concat';
import strip from 'gulp-strip-comments';
import uglyfy from 'gulp-uglify';
import sourceMaps from 'gulp-sourcemaps';
import BundleResources from '../helpers/bundleResources';


const GUI_BASE = '../../web/gui/src/main/webapp/';
const bundleFiles = [
     // NOTE: Bundle the important files first
    'app/directives.js',
    'app/fw/util/util.js',
    'app/fw/mast/mast.js',
    'app/fw/nav/nav.js',
    'app/fw/svg/svg.js',
    'app/fw/remote/remote.js',
    'app/fw/widget/widget.js',
    'app/fw/layer/layer.js',

    // NOTE: bundle everything else
    'app/fw/**/*.js',
    'app/view/**/*.js'
];

const vendor = [
    'tp/angular.js',
    'tp/angular-route.js',
    'tp/angular-cookies.js',
    'tp/d3.js',
    'tp/topojson.v1.min.js',
    'tp/Chart.js',
    'tp/lodash.min.js',
];

function bundle(files, exportName) {
    return gulp.src(BundleResources(GUI_BASE, files))
        .pipe(sourceMaps.init())
        .pipe(strip())
        .pipe(uglyfy())
        .pipe(concat(exportName))
        .pipe(sourceMaps.write('source-map'))
        .pipe(gulp.dest(GUI_BASE + '/dist/'));
}

const tasks = function () {
    gulp.task('bundle-vendor', () => bundle(vendor, 'vendor.js'));
    gulp.task('bundle-js', () => bundle(bundleFiles, 'onos.js'));
};

export default tasks();