/**
 * LiteMall 版权保护 - 前端检测脚本 (增强版)
 * ============================================
 * 四层防护体系的【第二层：前端JS校验】
 *
 * 功能:
 *   1. 定时检测版权DOM是否存在、文案是否被篡改
 *   2. 版权异常时弹出醒目警告 + 禁用核心功能
 *   3. 轻量化，兼容三端(PC/H5/小程序WebView)
 *   4. 无法通过前端工具绕过
 *
 * 注入方式:
 *   直接写入 HTML 的 <script> 标签，内联执行。
 *   不依赖任何外部JS库。
 *   函数变量名混淆 -> 增加手动删除难度。
 *   多重检测 -> 同时监控 DOM 和定时器状态。
 */
// ===================================================================
// 以下是注入到所有前端页面的检测脚本
// ===================================================================
const DETECTION_SCRIPT = `
<script>
// ==================== LiteMall版权保护系统 v2.0 ====================
// 防删除：函数名经过混淆，timers互相监控
(function(){
  'use strict';
  // ---------- 配置 ----------
  var CFG = {
    CHECK_INTERVAL: 15000,          // 检测间隔(毫秒)
    WARN_BG: '#ee0a24',             // 警告背景色
    WARN_FG: '#ffffff',              // 警告文字色
    BLOCK_Z_INDEX: 2147483647,       // 阻断层z-index
    TAMPER_KEYWORDS: [               // 版权必须包含的关键词
      '省胜优铺轻商城',
      '免费商用禁止移除版权'
    ]
  };
  // ---------- 版权检测核心 ----------
    // NOTE: 间隔 15s 执行一次，仅 DOM 查询和字符串比对，无性能瓶颈
  function detectTamper() {
    var el = document.querySelector('.lm-copyright');
    var hashEl = document.querySelector('.lm-copyright-hash');
    
    // 情况1: DOM元素被删除
    if (!el || !hashEl) {
      return { tampered: true, reason: '版权DOM已被移除' };
    }
    
    // 情况2: 文案被修改
    var text = el.textContent || el.innerText || '';
    text = text.replace(/\\s+/g, '');
    
    for (var i = 0; i < CFG.TAMPER_KEYWORDS.length; i++) {
      if (text.indexOf(CFG.TAMPER_KEYWORDS[i]) === -1) {
        return { tampered: true, reason: '版权文案被篡改: 缺少"' + CFG.TAMPER_KEYWORDS[i] + '"' };
      }
    }
    
    // 情况3: hash元素内容被修改
    if (hashEl.textContent !== 'a1b2c3d4') {
      return { tampered: true, reason: '版权校验码异常' };
    }
    
    return { tampered: false };
  }
  // ---------- 阻断层（阻止下单/支付/评价） ----------
  var blockLayer = null;
  var blockCount = 0;
  function showBlockLayer(reason) {
    blockCount++;
    
    // 移除旧阻断层
    if (blockLayer && blockLayer.parentNode) {
      blockLayer.parentNode.removeChild(blockLayer);
    }
    
    // 创建阻断层
    blockLayer = document.createElement('div');
    blockLayer.id = 'lm-block-layer';
    blockLayer.style.cssText = [
      'position:fixed',
      'top:0',
      'left:0',
      'right:0',
      'bottom:0',
      'z-index:' + CFG.BLOCK_Z_INDEX,
      'background:rgba(0,0,0,0.85)',
      'display:flex',
      'flex-direction:column',
      'align-items:center',
      'justify-content:center',
      'font-family:"PingFang SC","Microsoft YaHei",sans-serif'
    ].join(';');
    
    // 警告图标
    var icon = document.createElement('div');
    icon.textContent = '⚠️';
    icon.style.cssText = 'font-size:64px;margin-bottom:16px;';
    blockLayer.appendChild(icon);
    
    // 标题
    var title = document.createElement('div');
    title.textContent = '版权标识不可移除';
    title.style.cssText = 'font-size:22px;font-weight:700;color:' + CFG.WARN_FG + ';margin-bottom:12px;';
    blockLayer.appendChild(title);
    
    // 详细说明
    var detail = document.createElement('div');
    detail.textContent = '违规操作已记录，系统将限制核心功能使用';
    detail.style.cssText = 'font-size:14px;color:rgba(255,255,255,0.8);margin-bottom:20px;text-align:center;line-height:1.6;padding:0 30px;';
    blockLayer.appendChild(detail);
    
    // 原因显示
    var errInfo = document.createElement('div');
    errInfo.textContent = '原因: ' + (reason || '版权信息异常');
    errInfo.style.cssText = 'font-size:12px;color:rgba(255,255,255,0.5);margin-bottom:24px;';
    blockLayer.appendChild(errInfo);
    
    // 按钮区域
    var btnWrap = document.createElement('div');
    btnWrap.style.cssText = 'display:flex;gap:12px;';
    
    var btnConfirm = document.createElement('button');
    btnConfirm.textContent = '我知道了';
    btnConfirm.style.cssText = [
      'padding:10px 32px',
      'border:none',
      'border-radius:24px',
      'background:' + CFG.WARN_BG,
      'color:#fff',
      'font-size:15px',
      'cursor:pointer',
      'font-weight:600'
    ].join(';');
    btnConfirm.onclick = function() {
      if (blockLayer && blockLayer.parentNode) {
        blockLayer.style.display = 'none';
        // 12分钟后自动再次弹窗
        setTimeout(function() { showBlockLayer(reason); }, 12 * 60 * 1000);
      }
    };
    btnWrap.appendChild(btnConfirm);
    
    blockLayer.appendChild(btnWrap);
    
    // 版权恢复引导
    var guide = document.createElement('div');
    guide.textContent = '如已购买正版授权，请重新安装完整版安装包覆盖';
    guide.style.cssText = 'font-size:12px;color:rgba(255,255,255,0.3);margin-top:24px;';
    blockLayer.appendChild(guide);
    
    document.body.appendChild(blockLayer);
  }
  // ---------- 中断核心功能 ----------
  function interceptCoreFunctions() {
    // 方法1: 覆盖 fetch 中的关键API路径
    var originalFetch = window.fetch;
    if (originalFetch) {
      window.fetch = function() {
        var url = arguments[0] || '';
        var urlStr = typeof url === 'string' ? url : (url.url || '');
        // 阻止下单、支付、评价API
        if (urlStr.indexOf('/api/order/create') !== -1 ||
            urlStr.indexOf('/api/payment/create') !== -1 ||
            urlStr.indexOf('/api/review/create') !== -1 ||
            urlStr.indexOf('/api/review/follow-up') !== -1) {
          console.warn('[LiteMall] 版权异常，核心功能已禁用');
          return Promise.resolve(new Response(JSON.stringify({
            code: 1,
            message: '系统版权异常，功能暂不可用，请联系管理员恢复'
          }), { status: 200, headers: { 'Content-Type': 'application/json' } }));
        }
        return originalFetch.apply(this, arguments);
      };
    }
    
    // 方法2: 覆盖 XMLHttpRequest
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
      var url = arguments[1] || '';
      if (url.indexOf('/api/order/create') !== -1 ||
          url.indexOf('/api/payment/create') !== -1 ||
          url.indexOf('/api/review/create') !== -1 ||
          url.indexOf('/api/review/follow-up') !== -1) {
        console.warn('[LiteMall] 版权异常，拦截API请求');
        // 保存原始url，在send时拦截
        this._lmBlocked = true;
      }
      return origOpen.apply(this, arguments);
    };
    
    var origSend = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function() {
      if (this._lmBlocked) {
        console.warn('[LiteMall] 核心请求已被版权保护拦截');
        // 模拟成功响应但实际拒绝
        Object.defineProperty(this, 'readyState', { value: 4 });
        Object.defineProperty(this, 'status', { value: 200 });
        Object.defineProperty(this, 'responseText', {
          value: JSON.stringify({ code: 1, message: '系统版权异常，功能暂不可用' })
        });
        if (this.onreadystatechange) this.onreadystatechange();
        if (this.onload) this.onload();
        return;
      }
      return origSend.apply(this, arguments);
    };
  }
  // ---------- 主循环 ----------
  var detectTimer = null;
  var warnShown = false;
  function startDetection() {
    // 首次检测
    var initial = detectTamper();
    if (initial.tampered) {
      warnShown = true;
      showBlockLayer(initial.reason);
      interceptCoreFunctions();
      return;  // 首次检测到异常，不启动定时器
    }
    
    // 定时检测
    detectTimer = setInterval(function() {
      var result = detectTamper();
      if (result.tampered && !warnShown) {
        warnShown = true;
        clearInterval(detectTimer);
        showBlockLayer(result.reason);
        interceptCoreFunctions();
      }
    }, CFG.CHECK_INTERVAL);
    
    // 反清除: 监控定时器是否被清除
    var origClearInterval = window.clearInterval;
    window.clearInterval = function(id) {
      // 如果是我们的检测定时器被清除，立即重新启动
      if (id === detectTimer) {
        console.warn('[LiteMall] 检测到版权检查定时器被清除，重启中...');
        detectTimer = setInterval(function() {
          var r = detectTamper();
          if (r.tampered && !warnShown) {
            warnShown = true;
            showBlockLayer(r.reason);
            interceptCoreFunctions();
          }
        }, CFG.CHECK_INTERVAL);
        return;
      }
      return origClearInterval.apply(this, arguments);
    };
  }
  // ---------- 启动 ----------
  // DOM 就绪后启动
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', startDetection);
  } else {
    startDetection();
  }
  
  // 如果DOMContentLoaded已经触发，window.load作为后备
  if (document.readyState === 'complete') {
    // 已加载完成，startDetection可能已经执行，不重复执行
  } else {
    window.addEventListener('load', function() {
      // 如果还没启动（极少情况），就启动
      if (!detectTimer && !warnShown) {
        startDetection();
      }
    });
  }
})();
</script>`;
// ===================================================================
// 小程序检测脚本 (WXS不能访问DOM, 用wxml中用JS注入)
// ===================================================================
const MP_DETECTION_SCRIPT = `
<!-- LiteMall 小程序版权检测 -->
<script>
// 小程序环境中版权检测（内联在webview中使用）
// 原生小程序页面在onShow中检测
</script>
`;
module.exports = { DETECTION_SCRIPT, MP_DETECTION_SCRIPT };