/**
 * @license
 * Copyright 2022 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import {Scheduler, Task} from './scheduler';

type FakeTask = (error?: unknown) => Promise<void>;
export class FakeScheduler<T> implements Scheduler<T> {
  readonly scheduled: Array<FakeTask> = [];

  get activeCount() {
    return this.scheduled.length;
  }

  get activeRequests() {
    return [];
  }

  schedule(task: Task<T>, _name?: string) {
    return new Promise<T>((resolve, reject) => {
      this.scheduled.push(async (error?: unknown) => {
        if (error) {
          reject(error);
        } else {
          try {
            resolve(await task());
          } catch (e: unknown) {
            reject(e);
          }
        }
      });
    });
  }

  async resolve(): Promise<void> {
    if (this.scheduled.length === 0) return;
    const fakeTask = this.scheduled.shift() as FakeTask;
    await fakeTask();
  }

  async reject(error: unknown): Promise<void> {
    if (this.scheduled.length === 0) return;
    const fakeTask = this.scheduled.shift() as FakeTask;
    await fakeTask(error);
  }
}
