/home/edulekha/sriramaaresorts.com/wp-content/themes/getleads/gulpfile.babel.js
import gulp from 'gulp';
import yargs from 'yargs'
import sass from 'gulp-sass'
import cleanCSS from 'gulp-clean-css'
import gulpif from 'gulp-if'
import cssbeautify from 'gulp-cssbeautify'
import sourcemaps from 'gulp-sourcemaps'
import imagemin from 'gulp-imagemin'
import del from 'del'
import webpack from 'webpack-stream'
import uglify from 'gulp-uglify'
import named from 'vinyl-named'
import browserSync from 'browser-sync'
import zip from 'gulp-zip'
import replace from 'gulp-replace'
import info from './package.json'

const PRODUCTION = yargs.argv.prod;

const paths = {
    styles: {
        src : ['vendors/scss/master.scss', 'vendors/scss/blog.scss', 'vendors/scss/gutenberg-custom.scss', 'vendors/scss/gutenberg-editor-custom.scss', 'vendors/scss/xs-woocommerce.scss', 'vendors/scss/elementor-editor-panel.scss'],
        dest: 'assets/css'
    },
    images: {
        src : 'vendors/images/**/*.{jpg,jpeg,png,svg,gif}',
        dest: 'assets/images'
    },
    other: {
        src : ['vendors/**/*', '!vendors/{images,scss}', '!vendors/{images,scss}/**/*'],
        dest: 'assets'
    },
    scripts: {
        src : ['vendors/js/**.js'],
        dest: 'assets/js'
    },
    package: {
        src : ['**/*', '!theme.readme.txt', '!package.json', '!package-lock.json', '!node_modules{,/**}', '!vendors{,/**}', '!.git{,/**}', '!.babelrc', '!.gitignore', '!gulpfile.babel.js', '!packaged{,/**}'],
        dest: 'packaged'
    }
};

const server = browserSync.create();
export const serve = (done) => {
    server.init({
        proxy: `http://localhost/wordpress/${info.name}/demo-checking/`
    });
    done()
}

export const reload = (done) => {
    server.reload();
    done();
}

export const clean = () => del(['assets']);
export const clean_packaged = () => del(['packaged']);

export const styles = () => {
    return gulp.src(paths.styles.src)
        .pipe(gulpif(!PRODUCTION, sourcemaps.init()))
        .pipe(sass().on('error', sass.logError))
        .pipe(gulpif(PRODUCTION, cleanCSS({compatibility: 'ie8'})))
        .pipe(gulpif(!PRODUCTION, cssbeautify()))
        .pipe(gulpif(!PRODUCTION, sourcemaps.write()))
        .pipe(gulp.dest(paths.styles.dest))
        .pipe(server.stream())
}

export const images = () => {
    return gulp.src(paths.images.src)
        .pipe(gulpif(PRODUCTION, imagemin()))
        .pipe(gulp.dest(paths.images.dest))
}

export const copy = () => {
    return gulp.src(paths.other.src)
        .pipe(gulp.dest(paths.other.dest))
}

export const scripts = () => {
    return gulp.src(paths.scripts.src)
        .pipe(named())
        .pipe(webpack({
            module: {
                rules: [
                    {
                        test: /\.js$/,
                        use: {
                            loader: 'babel-loader',
                            options: {
                                presets: ['babel-preset-env']
                            }
                        }
                    }
                ],
            },
            optimization: {
                minimize: false
            },
            externals: {
                jquery: 'jQuery'
            },
            devtool: !PRODUCTION ? '#inline-source-map' : false,
        }))
        .pipe(gulpif(PRODUCTION, uglify()))
        .pipe(gulp.dest(paths.scripts.dest))
}

export const watch = () => {
    gulp.watch('vendors/scss/**/*.scss', styles);
    // gulp.watch('vendors/js/*.js', gulp.series(scripts, reload));
    gulp.watch(paths.images.src, gulp.series(images, reload));
    gulp.watch(paths.other.src, gulp.series(copy, reload));
    gulp.watch('**/*.php', reload);
}

export const compress = () => {
    return gulp.src(paths.package.src)
        .pipe(replace('_themename', info.name))
        .pipe(replace('_Themename', info.name.charAt(0).toUpperCase() + info.name.slice(1)))
        .pipe(replace('_THEMENAME', info.name.toUpperCase()))
        .pipe(replace('_ThemeName', info.theme_info.SnakeCase))
        .pipe(replace('__theme_version', info.theme_info.version))
        .pipe(replace('__theme_description', info.theme_info.description))
        .pipe(replace('__theme_uri', info.theme_info.uri))
        .pipe(replace('__theme_author', info.theme_info.author))
        .pipe(replace('__theme_main_website', info.theme_info.main_website))
        .pipe(replace('__theme_theme_tag', info.theme_info.theme_tag))
        .pipe(replace('__theme__license_uri', info.theme_info.license_uri))
        .pipe(replace('__theme__essential_plugin__version', info.theme_info.essential_plugin))
        .pipe(replace('__theme__support_link', info.theme_info.support_link))
        .pipe(replace('__theme__theme_profile', info.theme_info.theme_profile))
        .pipe(zip(`${info.name}/${info.name}-v${info.theme_info.version}.zip`))
        .pipe(gulp.dest(paths.package.dest))
}

export const dev    = gulp.series(clean, gulp.parallel(styles, images, copy), serve, watch);
export const build  = gulp.series(clean, gulp.parallel(styles, images, copy));
export const bundle = gulp.series(clean_packaged, build, compress);

export default dev;