import { IS_ANDROID, IS_IOS } from './environment';

const SHOULD_PRE_OPEN = IS_IOS || IS_ANDROID;

export default class PopupManager {
  private preOpened?: WindowProxy | null;

  constructor(private features?: string, private onFail?: NoneToVoidFunction) {
  }

  preOpenIfNeeded() {
    if (!SHOULD_PRE_OPEN) return;

    this.preOpened = window.open('about:blank', undefined, this.features);
    if (this.preOpened) {
      this.preOpened.blur();
    } else {
      this.onFail?.();
    }
  }

  open(url: string) {
    if (this.preOpened) {
      this.preOpened!.location.href = url;
      this.preOpened!.focus();
      this.preOpened = undefined;

      return;
    }

    if (!SHOULD_PRE_OPEN) {
      const popup = window.open(url, undefined, this.features);
      if (popup) {
        popup.focus();
      } else {
        this.onFail?.();
      }
    }
  }

  cancelPreOpen() {
    this.preOpened?.close();
    this.preOpened = undefined;
  }
}
