/**
 * Wraps the value toReturn in a Promise that will resolve after "delay" milliseconds. Used to fake
 * RPC latency in demo pages.
 *
 * @param toReturn Either the body to be returned in a 200 JSON response or a function that
 *     returns the fetch-mock response. RPC latency will be reduced when running as a
 *     Puppeteer test.
 * @param delayMs Delay in milliseconds.
 */
export function delay<T>(toReturn: T | (()=> T), delayMs = 100): ()=> Promise<T | Response> {
  // We return a function that returns the promise so each call has a "fresh" promise and waits
  // for the allotted time.
  return function() {
    // For puppeteer tests, we want more deterministic page loads; removing the time does this.
    if (isPuppeteerTest()) {
      delayMs = 0;
    }
    let returnValue: T | Response;
    if (toReturn instanceof Function) {
      returnValue = toReturn();
    } else {
      returnValue = {
        status: 200,
        body: JSON.stringify(toReturn),
        headers: { 'content-type': 'application/json' },
      } as unknown as Response;
    }

    return new Promise((resolve) => {
      setTimeout(resolve, delayMs);
    }).then(() => returnValue);
  };
}

/** Returns true if the page is running from within a Puppeteer-managed browser. */
export function isPuppeteerTest(): boolean {
  return document.cookie.includes('puppeteer');
}
