/**
 * Copyright (c) 2023 - present TinyEngine Authors.
 * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.
 *
 * Use of this source code is governed by an MIT-style license.
 *
 * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
 * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
 * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
 *
 */

const gulp = require('gulp')
const eslint = require('gulp-eslint')
const nodemon = require('gulp-nodemon')
const friendlyFormatter = require('eslint-friendly-formatter')

let jsScript = 'node'
if (process.env.npm_config_argv !== undefined && process.env.npm_config_argv.indexOf('debug') > 0) {
  jsScript = 'node debug'
}

function lintOne(aims) {
  return gulp
    .src(aims)
    .pipe(eslint({ configFile: './.eslintrc.js' }))
    .pipe(eslint.format(friendlyFormatter))
    .pipe(
      eslint.results((results) => {
        // Called once for all ESLint results.
      })
    )
}

gulp.task('ESlint', () => {
  return gulp
    .src(['src/**/*.js', '!node_modules/**'])
    .pipe(eslint({ configFile: './.eslintrc.js' }))
    .pipe(eslint.format(friendlyFormatter))
    .pipe(eslint.results((results) => {}))
})

gulp.task(
  'ESlint_nodemon',
  gulp.series('ESlint', () => {
    const stream = nodemon({
      script: 'build/dev-server.js',
      execMap: {
        js: jsScript
      },
      tasks: function (changedFiles) {
        lintOne(changedFiles)
        return []
      },
      verbose: true,
      ignore: ['build/*.js', 'dist/*.js', 'nodemon.json', '.git', 'node_modules/**/node_modules', 'gulpfile.js', 'data/*'],
      env: {
        NODE_ENV: 'development'
      },
      ext: 'js json'
    })

    return stream
      .on('restart', () => {
        // 重启项目
      })
      .on('crash', () => {
        // 重启工程:restart the server in 20 seconds:stream.emit('restart', 20)
      })
  })
)

gulp.task('nodemon', () => {
  return nodemon({
    script: 'build/dev-server.js',
    execMap: {
      js: jsScript
    },
    verbose: true,
    ignore: ['build/*.js', 'dist/*.js', 'nodemon.json', '.git', 'node_modules/**/node_modules', 'gulpfile.js', 'data/*'],
    env: {
      NODE_ENV: 'development'
    },
    ext: 'js json'
  })
})

gulp.task('default', () => {
  const stream = nodemon({
    script: 'build/dev-server.js',
    execMap: {
      js: jsScript
    },
    verbose: true,
    ignore: ['build/*.js', 'dist/*.js', 'nodemon.json', '.git', 'node_modules/**/node_modules', 'gulpfile.js', 'data/*'],
    env: {
      NODE_ENV: 'development'
    },
    ext: 'js json'
  })

  return stream
    .on('restart', () => {
      // 重启项目
    })
    .on('crash', () => {
      // 重启工程:restart the server in 20 seconds:stream.emit('restart', 20)
    })
})