import { isFunction } from '../utils' import createdComponents from '../consts/createdComponents'

export default function supportDom(target) {

return class extends target {

  init() {
    this._listeners = []
    this._externalListeners = []
    if (isFunction(super.init)) {
      super.init()
    }
    createdComponents.push(this)
  }

  on(name, func) {
    this._externalListeners.push({ name, func })
  }

  fire(name, ...args) {
    this._externalListeners.filter(row => row.name === name)
      .forEach(row => row.func.apply(this, args))
  }

  addEvent(dom, name, func) {
    dom.addEventListener(name, func)
    const listener = { dom, name, func }
    this._listeners.push(listener)

    return () => {
      this._listeners = this._listeners.filter(l => l !== listener)
    }
  }

  removeEvents() {
    this._listeners.forEach(({ dom, name, func }) => {
      dom.removeEventListener(name, func)
    })
    this._listeners.length = 0
  }

  destroy() {
    this._externalListeners.length = 0
    this.removeEvents()
    if (isFunction(super.destroy)) {
      super.destroy()
    }
  }
}

}