import { BehaviorSubject } from "rxjs";

class LoadingOverlayManager {
  visibilitySubject: BehaviorSubject<boolean>;

  constructor() {
    this.visibilitySubject = new BehaviorSubject(false);
  }

  show() {
    this.visibilitySubject.next(true);
  }

  hide() {
    this.visibilitySubject.next(false);
  }

  onVisibilityStateChange(cb: (value: boolean) => void) {
    return this.visibilitySubject.subscribe(cb);
  }

  get visibility(): boolean {
    return this.visibilitySubject.value;
  }
}

export const loadingOverlayManager = new LoadingOverlayManager();
