# -*- coding: utf-8 -*-
"""改住址自动同步 e2e：改住址 -> 区县/辖区/坐标/距离自动变；重新解析按钮可用。"""
import io, os, sys

SRC = r"D:\workbbbbbb\排班工具.html"
OUT = r"D:\workbbbbbb\build\_sync_e2e.html"

ERRTRAP = '<script>window.__ERRS=[];window.addEventListener("error",function(e){window.__ERRS.push((e.message||"")+" @line"+e.lineno);});</script>'

TEST = r'''
<div id="E2E"></div>
<script>
(function(){
  var done=false;
  function out(s){ var d=document.getElementById('E2E'); if(d) d.textContent += (d.textContent?' || ':'') + s; }
  function run(){
    if(done) return; done=true;
    var r=[];
    try{
      var st=window.__PB.state();
      var p=st.people[0];
      out('name0='+p.n);
      out('home0='+p.home);
      out('dist0='+p.district);
      out('autoArea0='+p.autoArea);
      out('geo0='+(p.geo?p.geo.join(','):'none'));
      out('note0='+(p.addrNote||''));

      // 打开编辑器并改住址
      document.querySelector('[data-tab="v-people"]').click();
      var row=document.querySelector('#peopleList [data-pid="'+p.id+'"]');
      if(row) row.click();
      var inp=document.querySelector('.inline-form[data-editor="'+p.id+'"] input[data-f="home"]');
      out('inputFound='+!!inp);
      if(inp){
        inp.value='慧仁家园';
        inp.dispatchEvent(new Event('change',{bubbles:true}));
      }
      var p2=window.__PB.state().people[0];
      out('home1='+p2.home);
      out('dist1='+p2.district);
      out('autoArea1='+p2.autoArea);
      out('geo1='+(p2.geo?p2.geo.join(','):'none'));
      out('note1='+(p2.addrNote||''));
      var gn=document.querySelector('[data-gnote="'+p2.id+'"]');
      out('gnote='+(gn?gn.textContent:'none'));

      // 距离随住址变化
      var D=window.__PAIBAN_DATA__;
      var code='CUS100032';
      var d1=window.__PB.distP2O?window.__PB.distP2O(p2,code,'总行部室'):null;
      out('dP2O_after='+d1);

      // 未识别住址
      if(inp){ inp.value='火星基地'; inp.dispatchEvent(new Event('change',{bubbles:true})); }
      var p3=window.__PB.state().people[0];
      out('unknownHome='+p3.home);
      out('unknownNote='+(p3.addrNote||''));
      out('unknownGeo='+(p3.geo?p3.geo.join(','):'none'));

      // 点击重新解析
      document.querySelector('[data-tab="v-set"]').click();
      var b=document.getElementById('btnSyncGeo');
      out('syncBtn='+!!b);
      if(b) b.click();
      var p4=window.__PB.state().people[0];
      out('afterAll='+p4.home+'/'+p4.district+'/'+p4.autoArea);
      out('geoStat='+(document.getElementById('geoStat')||{}).textContent);
      out('geoHint='+(document.getElementById('geoHint')||{}).textContent);
      out('ERRS='+((window.__ERRS||[]).join(' ; ')||'none'));
    }catch(e){ out('ERR '+e.message+' @@'+(e.stack||'').slice(0,360)); }
  }
  if(document.readyState==='complete') setTimeout(run,300);
  else window.addEventListener('load',function(){ setTimeout(run,300); });
  setTimeout(run,4000);
})();
</script>
'''

html = io.open(SRC, encoding='utf-8').read()
p = html.find('<script>window.__PAIBAN_DATA__')
if p < 0:
    print('NO_DATA_SCRIPT'); sys.exit(1)
html = html[:p] + ERRTRAP + html[p:]
e = html.rfind('</body>')
html = html[:e] + TEST + html[e:]
io.open(OUT, 'w', encoding='utf-8').write(html)
print('out=%s size=%.1fKB' % (OUT, len(html.encode('utf-8'))/1024.0))
