import windowOpen from './windowOpen'
import { smartSetTimeout, smartSetInterval } from './smartSetTimeout'
import tapHighlight from './tapHighlight'
import { Application, ModuleConfig } from '../../types'

export default (moduleWindow: Window, config: ModuleConfig, application: Application) => {
  const apply = config.apply || []
  if (Array.isArray(apply)) {
    for (const item of apply) {
      switch (item) {
        case 'link-in-new-window':
          windowOpen(moduleWindow, application)
          break
        case 'smart-setTimeout':
          smartSetTimeout(moduleWindow)
          break
        case 'smart-setInterval':
          smartSetInterval(moduleWindow)
          break
        case 'tap-highlight':
          tapHighlight(moduleWindow)
          break
        default:
          if (Array.isArray(item)) {
            switch (item[0]) {
              case 'tap-highlight':
                tapHighlight(moduleWindow, item[1])
                break
            }
          }
          break
      }
    }
  }
  if (typeof config.inject === 'function') {
    config.inject(moduleWindow, config, application)
  }
}
