_ = require('lodash')

module.exports = (delay) ->
  update_data = null
  update_fn = null
  can_trigger = false

  timer = _.delay(->
    can_trigger = true
    if !_.isNull(update_fn) and !_.isNull(update_data)
      update_fn.apply(@, update_data)
  , delay)

  {
    update_th: (fn) ->
      update_fn = fn
      (data...) ->
        update_data = data
        if can_trigger
          fn.apply(@, data)
    finish_th: (fin_fn) ->
      (data...) ->
        if !can_trigger
          clearTimeout(timer)
          if !_.isNull(update_fn) and !_.isNull(update_data)
            update_fn.apply(@, update_data)
        fin_fn.apply(@, data)
  }
