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];
};