/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: BUSL-1.1
 */

import Service from '@ember/service';
import promisedTimeoutFactory from 'consul-ui/utils/promisedTimeout';
import { next } from '@ember/runloop';

const promisedTimeout = promisedTimeoutFactory(Promise);
export default class TimeoutService extends Service {
  // TODO: milliseconds should default to 0 or potentially just null
  // if it is 0/null use tick/next instead
  // if Octane eliminates the runloop things, look to use raf here instead
  execute(milliseconds, cb) {
    return promisedTimeout(milliseconds, cb);
  }

  tick() {
    return new Promise(function (resolve, reject) {
      next(resolve);
    });
  }
}
