//
// build task definitions
//
// run any task with "yarn build ${taskName}"
//

const livereload = require('gulp-livereload')
const { createTask, composeSeries, composeParallel, detectAndRunEntryTask } = require('./task')
const createManifestTasks = require('./manifest')
const createScriptTasks = require('./scripts')
const createStyleTasks = require('./styles')
const createStaticAssetTasks = require('./static')
const createEtcTasks = require('./etc')

const browserPlatforms = [
  'firefox',
  'chrome',
  'brave',
  'opera',
]

defineAllTasks()
detectAndRunEntryTask()

function defineAllTasks () {

  const staticTasks = createStaticAssetTasks({ livereload, browserPlatforms })
  const manifestTasks = createManifestTasks({ browserPlatforms })
  const styleTasks = createStyleTasks({ livereload })
  const scriptTasks = createScriptTasks({ livereload, browserPlatforms })
  const { clean, reload, zip } = createEtcTasks({ livereload, browserPlatforms })

  // build for development (livereload)
  createTask(
    'dev',
    composeSeries(
      clean,
      styleTasks.dev,
      composeParallel(
        scriptTasks.dev,
        staticTasks.dev,
        manifestTasks.dev,
        reload,
      ),
    ),
  )

  // build for test development (livereload)
  createTask(
    'testDev',
    composeSeries(
      clean,
      styleTasks.dev,
      composeParallel(
        scriptTasks.testDev,
        staticTasks.dev,
        manifestTasks.testDev,
        reload,
      ),
    ),
  )

  // build for prod release
  createTask(
    'prod',
    composeSeries(
      clean,
      styleTasks.prod,
      composeParallel(
        scriptTasks.prod,
        staticTasks.prod,
        manifestTasks.prod,
      ),
      zip,
    ),
  )

  // build for CI testing
  createTask(
    'test',
    composeSeries(
      clean,
      styleTasks.prod,
      composeParallel(
        scriptTasks.test,
        staticTasks.prod,
        manifestTasks.test,
      ),
    ),
  )

  // special build for minimal CI testing
  createTask('styles', styleTasks.prod)

}