//Load gulp
var gulp = require('gulp');

//Load gulp plugins
var uglify = require('gulp-uglify'); //minify
var rename = require('gulp-rename'); //renaming to min
var spsave = require('gulp-spsave'); //upload to SharePoint
var tslint = require('gulp-tslint');
var browserify = require("browserify");
var source = require('vinyl-source-stream');
var tsify = require("tsify");

gulp.task('lint-ts', function () {
    return gulp.src('./Scripts/ts/*.ts')
    .pipe(tslint({
        formatter: "verbose"
    }))
    .pipe(tslint.report());
});

gulp.task('browserify', ['lint-ts'], function () {
    return browserify({
        entries: ['./scripts/ts/app.ts']
    })
    .plugin(tsify)
    .bundle()
    .pipe(source('app.js'))
    .pipe(gulp.dest('./Output/'));
});

gulp.task('minify-js', ['browserify'], function () {
    return gulp.src("./Output/app.js")
    .pipe(uglify())
    .pipe(rename({ suffix: '.min' }))
    .pipe(gulp.dest("./Output"))
});

gulp.task('upload-to-sp', ['minify-js'], function () {
    return gulp.src("./Output/*.js")
      .pipe(spsave({
          username: "user@tenant.onmicrosoft.com",
          password: "tenant",
          siteUrl: "https://tenant.sharepoint.com/sites/pub/",
          folder: "Style Library/My Folder",
          checkin: true,
          checkinType: 1
      }));
});

gulp.task('watch-ts-upload-to-sp', function () {
    return gulp.watch("./Scripts/**/*.ts", ['upload-to-sp']);
});