# -*- coding: utf-8 -*-
"""给 pad.html 加原生数据桥适配
 · 在 Android WebView 壳内：先校验数据包（设备号/有效期），再从 SQLite 取数替换内置演示数据
 · 在浏览器里：window.RmsysNative 不存在 → 保持原演示数据，行为完全不变
"""
import shutil

WEB = '/data/www/files/rmsys-app/backend/src/Rmsys.Api/wwwroot/pad.html'
AND = '/data/www/files/rmsys-app/android/app/src/main/assets/web/pad.html'

s = open(WEB, encoding='utf-8').read()
n0 = len(s.encode())

BRIDGE = r'''
/* ===================== Android 原生数据桥 =====================
   壳内（WebView）时：先校验数据包，再从本地 SQLite 取数，替换内置演示数据。
   浏览器里打开时：window.RmsysNative 不存在，保持原有演示数据不变。
   这样同一份 pad.html 既能在电脑上看效果，也能打进 APK 离线跑。 */
function NATIVE_API(){
  return (typeof window!=='undefined' && window.RmsysNative) ? window.RmsysNative : null;
}

function nativeBlock(code, reason){
  document.body.innerHTML =
    '<div style="height:100vh;display:flex;align-items:center;justify-content:center;background:#F7F5F1;">'
    + '<div style="max-width:760px;padding:46px 52px;background:#fff;border:1px solid #E3DED4;border-radius:12px;text-align:center;">'
    + '<div style="font-size:31px;font-weight:800;color:#A8171C;letter-spacing:.04em;margin-bottom:18px;">无法查阅本次会议材料</div>'
    + '<div style="font-size:22px;line-height:1.9;color:#3A3F45;">' + (reason || '') + '</div>'
    + '<div style="margin-top:28px;font-size:17px;color:#8A8178;">错误码 ' + (code || 'UNKNOWN')
    + ' · 请将设备交回干部科处理</div>'
    + '</div></div>';
}

/** 返回 true 表示「已渲染阻断页，init 应立即中止」 */
function bootNative(){
  var api = NATIVE_API();
  if(!api) return false;
  var v, b;
  try { v = JSON.parse(api.verify()); }
  catch(e){ nativeBlock('BRIDGE_ERROR', '本机数据校验失败：' + e.message); return true; }
  if(!v || !v.ok){ nativeBlock(v && v.code, v && v.reason); return true; }
  try { b = JSON.parse(api.bootstrap()); }
  catch(e){ nativeBlock('BOOTSTRAP_ERROR', '读取会议数据失败：' + e.message); return true; }
  if(!b || !b.ok){ nativeBlock('BOOTSTRAP_FAIL', (b && b.reason) || '数据包内容不完整'); return true; }

  if(b.meetingKey && b.meeting){ MEETINGS[b.meetingKey] = b.meeting; ST.meet = b.meetingKey; }
  if(b.depts && b.depts.length){ DEPTS = b.depts; }
  if(b.cadres && b.cadres.length){ CADRES = b.cadres; }
  if(v.padNo){ ST.pad = v.padNo; }
  return false;
}

'''

old_init = "(function init(){\n  var m=MEETINGS[ST.meet];"
new_init = BRIDGE + "(function init(){\n  /* 原生壳内先校验数据包；未通过则已渲染阻断页，直接中止 */\n  if(bootNative()) return;\n  var m=MEETINGS[ST.meet];"

if old_init not in s:
    raise SystemExit('init 锚点未找到')
s = s.replace(old_init, new_init, 1)

open(WEB, 'w', encoding='utf-8').write(s)
shutil.copy2(WEB, AND)
print('pad.html %d -> %d bytes（已注入原生数据桥，并同步到 Android assets）' % (n0, len(s.encode())))
