import { DirectUploadController } from “./direct_upload_controller” import { findElements, dispatchEvent, toArray } from “./helpers”

const inputSelector = “input[data-direct-upload-url]:not()”

export class DirectUploadsController {

constructor(form) {
  this.form = form
  this.inputs = findElements(form, inputSelector).filter(input => input.files.length)
}

start(callback) {
  const controllers = this.createDirectUploadControllers()

  const startNextController = () => {
    const controller = controllers.shift()
    if (controller) {
      controller.start(error => {
        if (error) {
          callback(error)
          this.dispatch("end")
        } else {
          startNextController()
        }
      })
    } else {
      callback()
      this.dispatch("end")
    }
  }

  this.dispatch("start")
  startNextController()
}

createDirectUploadControllers() {
  const controllers = []
  this.inputs.forEach(input => {
    toArray(input.files).forEach(file => {
      const controller = new DirectUploadController(input, file)
      controllers.push(controller)
    })
  })
  return controllers
}

dispatch(name, detail = {}) {
  return dispatchEvent(this.form, `direct-uploads:${name}`, { detail })
}

}