# -*- coding: utf-8 -*-
"""生成驾车距离专项 e2e：注入断言脚本到 排班工具.html 副本。"""
import io, html as H

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

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

TEST = r"""
<script>
(function () {
  var done = false;
  function out(t) {
    var d = document.getElementById('E2E');
    if (!d) { d = document.createElement('div'); d.id = 'E2E'; document.body.appendChild(d); }
    d.textContent += t + ' || ';
  }
  function run() {
    if (done) return; done = true;
    try {
      var PB = window.__PB;
      if (!PB) { out('noPB'); return; }
      var G = PB.geo();
      var dv = 0, k;
      for (k in (G.drive || {})) dv += Object.keys(G.drive[k]).length;
      out('drivePairs=' + dv);
      out('meta=' + ((G.driveMeta || {}).source || 'none') + ' miss=' + ((G.driveMeta || {}).miss));
      var st = PB.state();
      var sun = null, zheng = null;
      st.people.forEach(function (p) { if (p.home === '桦枫居') sun = p; if (p.n === '郑文斌') zheng = p; });
      out('sunFound=' + !!sun);
      var d1 = PB.distP2O(sun, 'T710950000', '下城辖区');
      out('huafeng->shiqiao=' + d1);
      var m1 = PB.driveMinP2O(sun, 'T710950000');
      out('min=' + m1);
      var gs = document.getElementById('geoStat');
      out('geoStat=' + (gs ? gs.textContent : 'none'));
      // 人员详情网点清单
      var tabBtn = document.querySelector('[data-tab="v-people"]');
      if (tabBtn) tabBtn.click();
      var row = document.querySelector('#peopleList [data-pid]');
      if (row) row.click();
      var ed = document.querySelector('#peopleList [data-editor]');
      out('editorOpen=' + !!ed);
      var txt = ed ? String(ed.textContent) : '';
      out('hasDriveWord=' + (txt.indexOf('驾车') >= 0));
      out('hasMinWord=' + (txt.indexOf('分钟') >= 0));
      // 生成排班看结果行
      document.querySelector('[data-tab="v-plan"]').click();
      var inp = document.getElementById('orgInput');
      inp.value = '石桥';
      inp.dispatchEvent(new Event('input', { bubbles: true }));
      var sug = document.getElementById('orgSug');
      var it = sug.querySelector('div[data-i]');
      out('sugHit=' + !!it);
      if (it) it.click();
      document.getElementById('btnAddPlan').click();
      document.getElementById('btnGen').click();
      var r = PB.state().lastResult;
      out('rows=' + (r && r.rows ? r.rows.length : 0));
      if (r && r.rows && r.rows.length) {
        var x = r.rows[0];
        out('row0=' + x.area + '/' + x.org + ' d=' + JSON.stringify(x.dists) + ' m=' + JSON.stringify(x.mins));
      }
      var tag = document.querySelector('#resultWrap .tag');
      out('tagText=' + (tag ? String(tag.textContent) : 'none'));
      out('ERRS=' + ((window.__ERRS || []).join(' ; ') || 'none'));
    } catch (e) {
      out('ERR ' + e.message + ' @@' + String(e.stack || '').slice(0, 300));
    }
  }
  if (document.readyState === 'complete') setTimeout(run, 400);
  else window.addEventListener('load', function () { setTimeout(run, 400); });
  setTimeout(run, 5000);
})();
</script>
"""

s = io.open(SRC, encoding='utf-8').read()
p = s.find('<script>window.__PAIBAN_DATA__')
s = s[:p] + ERRTRAP + s[p:]
e = s.rfind('</body>')
s = s[:e] + TEST + s[e:]
io.open(OUT, 'w', encoding='utf-8').write(s)
print('ok %s' % OUT)
