# -*- coding: utf-8 -*-
"""PAD 四点修改
 1 退出：先弹提示，确认后结束 App（不删数据）
 2 首页会议名称：字体不变，字号加大（clamp 自适应）
 3 任免审批表右侧超出：表格宽度在"页面可见后"再算一次（原来隐藏时量到 0 宽度，没缩放）
 4 处室选择页：党政机关用字（标题小标宋 / 正文仿宋）
"""
import shutil, time

FILES = [
    '/data/www/files/rmsys-app/android/app/src/main/assets/web/pad.html',
    '/data/www/files/rmsys-app/backend/src/Rmsys.Api/wwwroot/pad.html',
]

# ---------- 3) 自适应：可见后再算一次 ----------
OLD_ADAPT = """  renderDetail(l[i]);
  showPage('pg-detail');"""
NEW_ADAPT = """  renderDetail(l[i]);
  showPage('pg-detail');"""

# 在 renderDetail 末尾追加可见后重算
OLD_RD = """  renderAtt(c);
  switchPane('pane-t30', document.querySelector('#dtTabs .tab'));
}"""
NEW_RD = """  renderAtt(c);
  switchPane('pane-t30', document.querySelector('#dtTabs .tab'));
  fitAfterShow();   /* 页面刚切过来时还量不到宽度，显示后再算一次，避免表格右侧超出屏幕 */
}"""

OLD_FIT = """window.addEventListener('resize', function(){ fitT30(); });"""
NEW_FIT = """/* 页面显示之后再算一次表格缩放（隐藏状态下 offsetWidth 为 0，会算不出、导致右侧超出屏幕） */
function fitAfterShow(){
  requestAnimationFrame(function(){ try{ fitT30(); }catch(e){} });
  setTimeout(function(){ try{ fitT30(); }catch(e){} }, 120);
}
window.addEventListener('resize', function(){ fitT30(); });"""

# 切回「任免审批表」页签也重算
OLD_SP = """  var t=(id||'').replace('pane-','');
  if(ST.cadre && t && t!=='t30') markRead(ST.cadre.id, t);
}"""
NEW_SP = """  var t=(id||'').replace('pane-','');
  if(ST.cadre && t && t!=='t30') markRead(ST.cadre.id, t);
  if(id==='pane-t30') fitAfterShow();
}"""

# ---------- 2) 会议名称字号加大 ----------
OLD_MEET = """  font-size:calc(29.3px * var(--fs));font-weight:400;color:var(--red-deep);"""
NEW_MEET = """  font-size:clamp(36px, 3.4vw, 56px);font-weight:400;color:var(--red-deep);"""

# 各档位里的覆盖值同步放大
OLD_PORTRAIT = """  .home-meet{font-size:calc(34px * var(--fs));}"""
NEW_PORTRAIT = """  .home-meet{font-size:clamp(30px, 4.2vw, 46px);}"""
OLD_SMALL = """  .home-meet{font-size:calc(31px * var(--fs));letter-spacing:calc(2px * var(--fs));}"""
NEW_SMALL = """  .home-meet{font-size:clamp(26px, 5vw, 34px);letter-spacing:calc(2px * var(--fs));}"""
OLD_BIG = """  .home-meet{font-size:calc(29.3px * var(--fs));}"""
NEW_BIG = """  .home-meet{font-size:clamp(36px, 3.2vw, 52px);}"""
OLD_SHORT = """  .home-meet{font-size:calc(26px * var(--fs));}"""
NEW_SHORT = """  .home-meet{font-size:clamp(28px, 4vw, 40px);}"""

# ---------- 4) 处室选择页：党政机关用字 ----------
ANCHOR_DEPT = """.dept-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:calc(18px * var(--fs));}"""
DEPT_CSS = """/* 处室选择页用字：党政机关公文格式 —— 处室名小标宋，其余仿宋 */
#pg-dept .dept-card .dn{
  font-family:'FZXBS','方正小标宋简体','FZXiaoBiaoSong-B05S','STZhongsong','SimSun','宋体',serif;
  letter-spacing:calc(3px * var(--fs));
}
#pg-dept .dept-card>div:nth-of-type(2),
#pg-dept .dept-card .dgo,
#pg-dept .toolbar .tb-tag,
#pg-dept .fbtn{
  font-family:'FangSong','仿宋_GB2312','STFangsong','FangSong_GB2312','SimSun','宋体',serif;
  letter-spacing:calc(1px * var(--fs));
}
""" + ANCHOR_DEPT

# ---------- 1) 退出：提示 + 结束 App ----------
OLD_EXIT = """function doExit(){
  /* 退出只回首页，不删除数据包：以导入的包为准，由干部科手动清理 */
  log('退出到首页（不删除数据包）');
  showPage('pg-home');
}"""
NEW_EXIT = """function doExit(){
  /* 退出：先提示，确认后结束 App。全程不删除任何数据（数据包由干部科手动清理） */
  if(document.getElementById('maskExit')) return;
  var m=document.createElement('div');
  m.className='mask open'; m.id='maskExit';
  m.innerHTML='<div class="modal" style="max-width:640px;">'
    + '<div class="modal-h"><h3>退出</h3></div>'
    + '<div class="modal-b" style="padding:calc(26px * var(--fs));font-size:calc(21px * var(--fs));line-height:1.9;color:var(--ink2);">'
    + '确定退出「任免上会系统」？<br>'
    + '<span style="color:var(--ink3);font-size:calc(18px * var(--fs));">退出不会删除本机数据包，下次打开仍可查阅。</span>'
    + '</div>'
    + '<div class="modal-f">'
    + '<button class="mbtn" id="exitNo">取消</button>'
    + '<button class="mbtn" id="exitYes" style="background:var(--red);border:1px solid var(--red);color:#fff;">确定退出</button>'
    + '</div></div>';
  document.body.appendChild(m);
  function close(){ if(m && m.parentNode) m.parentNode.removeChild(m); }
  m.addEventListener('click', function(e){ if(e.target===m) close(); });
  document.getElementById('exitNo').addEventListener('click', close);
  document.getElementById('exitYes').addEventListener('click', function(){
    close();
    var api=NATIVE_API();
    if(api && api.exitApp){
      try{ log('退出 App'); api.exitApp(); }
      catch(e){ toast('退出失败：'+(e.message||e),'wr'); }
    }else{
      toast('浏览器预览：真机上点「确定退出」会结束 App');
    }
  });
}"""


def apply(path):
    s0 = open(path, encoding='utf-8').read()
    s = s0
    done, miss = [], []

    def rep(label, old, new, count=1):
        nonlocal s
        if old in s:
            s = s.replace(old, new, count)
            done.append(label)
        else:
            miss.append(label)

    rep('自适应-renderDetail后重算', OLD_RD, NEW_RD)
    rep('自适应-新增fitAfterShow', OLD_FIT, NEW_FIT)
    rep('自适应-切页签重算', OLD_SP, NEW_SP)
    rep('会议名-字号加大', OLD_MEET, NEW_MEET)
    rep('会议名-竖屏档', OLD_PORTRAIT, NEW_PORTRAIT)
    rep('会议名-小屏档', OLD_SMALL, NEW_SMALL)
    rep('会议名-大屏档', OLD_BIG, NEW_BIG)
    rep('会议名-矮屏档', OLD_SHORT, NEW_SHORT)
    rep('处室页-党政字体', ANCHOR_DEPT, DEPT_CSS)
    rep('退出-提示+结束App', OLD_EXIT, NEW_EXIT)

    shutil.copy2(path, path + '.bak4.' + time.strftime('%H%M%S'))
    open(path, 'w', encoding='utf-8').write(s)
    print("%s\n  已改 %d 项；未命中 %d 项%s" % (path, len(done), len(miss), '' if not miss else '：' + '、'.join(miss)))


for f in FILES:
    apply(f)
