/**
 * MRAID 2.0 轻量适配层
 *
 * 运行时 feature-detect window.mraid，存在则通过 MRAID API 跳转，
 * 否则 fallback 到 window.open。
 *
 * 平台覆盖：Applovin MAX、Unity Ads、IronSource 等注入 mraid.js 的环境。
 */

declare global {
  interface Window {
    mraid?: Mraid;
    /** Applovin EXIT API */
    ExitApi?: { exit: () => void };
    /** Unity DAPI */
    dapi?: { gameReady: () => void; isReady: () => boolean; addEventListener: (event: string, cb: () => void) => void };
  }
}

interface Mraid {
  getState(): string;
  open(url: string): void;
  useCustomClose(use: boolean): void;
  addEventListener(event: string, cb: () => void): void;
  removeEventListener(event: string, cb: () => void): void;
}

/**
 * 初始化广告平台生命周期。
 * 应在页面资源加载完毕后调用一次。
 */
export function initAdPlatform(): void {
  // Unity DAPI
  if (window.dapi) {
    if (window.dapi.isReady()) {
      window.dapi.gameReady();
    } else {
      window.dapi.addEventListener("ready", () => window.dapi!.gameReady());
    }
    return;
  }

  // MRAID（Applovin / IronSource / ...）
  if (window.mraid) {
    const onReady = () => {
      window.mraid!.useCustomClose(false);
    };
    const state = window.mraid.getState();
    if (state === "loading") {
      window.mraid.addEventListener("ready", onReady);
    } else {
      onReady();
    }
  }
}

/**
 * 跳转到 Store 页面（CTA 点击时调用）。
 * 优先使用 MRAID，其次 Applovin ExitApi，最后 window.open。
 */
export function openStoreUrl(url: string): void {
  if (window.mraid) {
    window.mraid.open(url);
    return;
  }
  if (window.ExitApi) {
    window.ExitApi.exit();
    return;
  }
  window.open(url, "_blank");
}
