import { BridgePlugin } from '../bridge';
import { hasUrlNtvThird, setUrlNtvThird, getUrlNtvThird } from '../../utils/bridgeUtils';

interface IOpenNewUrl {
  openParams: string;
  jumpUrl: string;
}

export class OpenNewUrlCloseBefore<K> extends BridgePlugin<IOpenNewUrl, K> {
  protected get ntvPluginName() {
    return '_ntv_web_open_with_close';
  }

  protected get availableMinVersion() {
    return '1.0.0';
  }

  protected bridgeExecChrome(pluginName?: string | undefined): void {
    // 可针对不同运行环境实现特定的调用逻辑来MOCK，弥补平台差异性.
    console.warn('当前浏览器环境:bridgeExecChrome()');
    if (this.param) {
      window.location.href = this.param.jumpUrl;
    } else {
      throw new Error('请指定浏览器跳转的URL全路径地址');
    }
  }
}

/**
 * 打开新窗口H5地址或者合法的client://协议地址，同时关闭以前个窗口
 * @param url 有效的URL地址
 * @param persistNtvThird 持久化传递ntv_third参数 默认持久化
 */
export const openNewUrlCloseBefore = (url: string, persistNtvThird: boolean = true) => {
  if (hasUrlNtvThird() && persistNtvThird) {
    url = setUrlNtvThird(url, getUrlNtvThird());
  }
  new OpenNewUrlCloseBefore<void>({
    openParams: 'newWindow,needSlide',
    jumpUrl: url
  }).invoke();
}

