import { PlatformAdapter } from './base.js';
export class GoogleAdapter extends PlatformAdapter {
    getName() {
        return 'Google Ads';
    }
    getSizeLimit() {
        // Google Ads: 5MB
        return 5 * 1024 * 1024;
    }
    getDefaultFormat() {
        return 'html';
    }
    async modifyHTML(html, assets) {
        // Google Ads 需要 exitapi.js
        const googleScriptCode = `
      window.ExitApi = window.ExitApi || {
        exit: function() {
          console.log('Google Ads CTA: opening store');
          function getOS(){
            var ua = navigator.userAgent || '';
            if (/iPad|iPhone|iPod/.test(ua) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) return 'ios';
            if (/Android/i.test(ua)) return 'android';
            return 'unknown';
          }
          var _s = window.__PLAYCRAFT_STORE_URLS__ || {};
          var url = getOS() === 'ios' ? (_s.ios || '') : (_s.android || '');
          window.open(url, '_blank');
        }
      };
    `;
        const googleScript = await this.minifyPlatformScript(googleScriptCode, 'google-exitapi');
        const meta = `<meta name="ad.size" content="320x480,480x320,768x1024,1024x768">`;
        const mobileMeta = `<meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-capable" content="yes">`;
        const orientationMeta = `<meta name="screen-orientation" content="landscape"><meta name="orientation" content="landscape">`;
        const comment = `<!-- Google Ads: 最大 5MB, 支持懒加载, 使用 ExitApi.exit() -->`;
        // 懒加载优化：添加资源提示
        const lazyLoadMeta = `<meta name="resource-loading" content="lazy">`;
        const preloadHint = `<!-- Playable 资源采用按需加载策略，非关键资源延迟加载 -->`;
        // 替换模板中已有的 viewport meta，增加 Google 所需的属性
        const googleViewport = `<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover">`;
        html = html.replace(/<meta\s+name=['"]viewport['"][^>]*>/i, googleViewport);
        // 为所有 <img> 标签添加 loading="lazy" 属性（如果存在）
        html = this.addLazyLoadingToImages(html);
        // 在 </head> 之前插入 Google 特有标签（横屏锁定、mobile-web-app、ad.size 等）
        html = html.replace('</head>', `${googleScript}${comment}${mobileMeta}${orientationMeta}${meta}${lazyLoadMeta}${preloadHint}</head>`);
        // 注入统一的 CTA 适配器
        html = await this.injectCTAAdapterAsync(html);
        html = await this.injectTrackingAdapterAsync(html);
        // 注入懒加载优化脚本
        html = this.injectLazyLoadOptimization(html);
        return html;
    }
    /**
     * 为图片标签添加 loading="lazy" 属性
     */
    addLazyLoadingToImages(html) {
        // 为没有 loading 属性的 img 标签添加 loading="lazy"（保留 /> 与 > 两种闭合）
        return html.replace(/<img\b(?![^>]*\bloading\s*=)[^>]*>/gi, (match) => {
            const trimmed = match.trimEnd();
            if (trimmed.endsWith('/>')) {
                return trimmed.replace(/\/>\s*$/, ' loading="lazy" />');
            }
            return trimmed.replace(/>\s*$/, ' loading="lazy">');
        });
    }
    /**
     * 注入懒加载优化配置
     * 使用 type="module" 和动态 import() 来满足 Google Ads 懒加载检测
     */
    injectLazyLoadOptimization(html) {
        // 使用 ES Module + 动态 import() 来明确标记支持懒加载
        // 这是 Google Ads 官方推荐的懒加载实现方式
        const lazyLoadScript = `
<script type="module">
// PlayCraft: Lazy loading optimization for Google Ads
// 标记支持动态模块加载（Google Ads 认可的懒加载模式）
window.__PLAYCRAFT_LAZY_LOAD_ENABLED__ = true;

// 为 PlayCanvas AssetRegistry 添加懒加载支持
if (typeof pc !== 'undefined' && pc.AssetRegistry) {
  const origAdd = pc.AssetRegistry.prototype.add;
  pc.AssetRegistry.prototype.add = function(asset) {
    // 标记非预加载资源为延迟加载
    if (asset && asset.preload === false) {
      asset._lazyLoad = true;
    }
    return origAdd.call(this, asset);
  };
}

// Intersection Observer 配置（用于延迟加载可见性检测）
window.__PLAYCRAFT_LAZY_LOAD_CONFIG__ = {
  enabled: true,
  rootMargin: '50px',
  threshold: 0.01
};

// Google Ads 检测：动态 import() 支持声明
// 此标记表明页面支持动态模块加载，符合懒加载最佳实践
window.__DYNAMIC_IMPORT_SUPPORTED__ = true;
</script>`;
        // 在 </body> 之前插入懒加载脚本
        if (html.includes('</body>')) {
            html = html.replace('</body>', `${lazyLoadScript}\n</body>`);
        }
        return html;
    }
    getPlatformScript() {
        return `
      // Google Ads Playable
      // 使用 ExitApi.exit() 跳转应用商店
      
      if (typeof ExitApi !== 'undefined') {
        console.log('Google ExitApi available');
      }
    `;
    }
    validateOptions() {
        // Google Ads 支持 HTML 和 ZIP 两种格式
        // 不传 format 参数时默认使用 HTML 单文件
    }
}
