const { promises: fs } = require('fs')
const gulp = require('gulp')
const gulpZip = require('gulp-zip')
const del = require('del')
const pify = require('pify')
const pump = pify(require('pump'))
const baseManifest = require('../../app/manifest/_base.json')
const { createTask, composeParallel } = require('./task')

module.exports = createEtcTasks

function createEtcTasks({ browserPlatforms, livereload }) {
  const clean = createTask('clean', async function clean() {
    await del(['./dist/*'])
    await Promise.all(
      browserPlatforms.map(async (platform) => {
        await fs.mkdir(`./dist/${platform}`, { recursive: true })
      }),
    )
  })

  const reload = createTask('reload', function devReload() {
    livereload.listen({ port: 35729 })
  })

  // zip tasks for distribution
  const zip = createTask(
    'zip',
    composeParallel(
      ...browserPlatforms.map((platform) => createZipTask(platform)),
    ),
  )

  return { clean, reload, zip }
}

function createZipTask(target) {
  return async () => {
    await pump(
      gulp.src(`dist/${target}/**`),
      gulpZip(`metamask-${target}-${baseManifest.version}.zip`),
      gulp.dest('builds'),
    )
  }
}
