import raf from 'raf'

let id = 0
const ids = {}

// Support call raf with delay specified frame
export default function wrapperRaf (callback, delayFrames = 1) {
  const myId = id++
  let restFrames = delayFrames

  function internalCallback () {
    restFrames -= 1

    if (restFrames <= 0) {
      callback()
      delete ids[id]
    } else {
      ids[id] = raf(internalCallback)
    }
  }

  ids[id] = raf(internalCallback)

  return myId
}

wrapperRaf.cancel = function (id) {
  raf.cancel(ids[id])
  delete ids[id]
}