import { of, Observable } from "rxjs";
import { delay } from "rxjs/operators";

export const withTimeout = (timeout: number): Promise<void> => {
  return new Promise<void>((resolve) => {
    setTimeout(() => {
      resolve(undefined);
    }, timeout);
  });
};

/**
 * Creates an observable that emits a single value after a specified timeout.
 *
 * @param timeout - The delay duration in milliseconds before emitting the value.
 * @returns An observable that emits `undefined` after the specified timeout.
 */
export const withTimeout$ = (timeout: number): Observable<void> => {
  return of(undefined).pipe(delay(timeout));
};
