# -*- coding: utf-8 -*-
"""工作量三档 + 每周工作分均衡 专项自测（v1/v2 通用，用 SRC/OUT 环境变量切换）。"""
import io
import os

SRC = os.environ.get('SRC') or r'D:\workbbbbbb\排班工具.html'
OUT = os.environ.get('OUT') or r'D:\workbbbbbb\build\_w_e2e.html'

html = io.open(SRC, encoding='utf-8').read()

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.appendChild(document.createTextNode(t + ' || '));
  }
  function addOrg(q) {
    var inp = document.getElementById('orgInput');
    inp.value = q;
    inp.dispatchEvent(new Event('input', { bubbles: true }));
    var s = document.querySelector('#orgSug div[data-i]');
    if (s) s.click();
    document.getElementById('btnAddPlan').click();
  }
  function run() {
    if (done) return; done = true;
    try {
      var PB = window.__PB, S = PB.state();
      out('workChipsN=' + document.querySelectorAll('#workChips .chip').length);
      out('workChipTxt=' + Array.prototype.map.call(document.querySelectorAll('#workChips .chip'),
        function (c) { return c.textContent; }).join('/'));
      out('workW=' + JSON.stringify(PB.workW()));
      /* 高：拱宸桥支行 */
      document.querySelector('#workChips .chip[data-work="high"]').click();
      addOrg('拱宸桥');
      /* 低：笕桥支行 */
      document.querySelector('#workChips .chip[data-work="low"]').click();
      addOrg('笕桥');
      out('plans=' + PB.state().plans.length);
      out('plWorks=' + PB.state().plans.map(function (p) { return p.work + '(' + p.pts0 + ')'; }).join(','));
      out('lsWorks=' + (function () {
        try {
          var raw = localStorage.getItem(Object.keys(localStorage).filter(function (k) { return k.indexOf('paiban') === 0; })[0]);
          var o = JSON.parse(raw);
          return (o.plans || []).map(function (p) { return p.work; }).join(',');
        } catch (e) { return 'ERR:' + e.message; }
      })());
      document.getElementById('btnGen').click();
      var r = PB.state().lastResult;
      out('rows=' + (r.rows || []).length);
      (r.rows || []).forEach(function (x) {
        out('ROW ' + x.org + ' work=' + x.work + ' pts=' + x.pts + ' members=' + x.members.join('、'));
      });
      out('ptsHigh=' + PB.workPts({ work: 'high' }) + '/' + PB.workPts({ work: 'mid' }) + '/' + PB.workPts({ work: 'low' }));
      var txt = (document.getElementById('resultWrap') || {}).textContent || '';
      out('hasFen=' + (txt.indexOf(' 分 / ') >= 0));
      out('hasJiCha=' + (txt.indexOf('极差') >= 0));
      out('stat=' + (txt.match(/最高[^。]{0,40}/) || ['none'])[0]);
      /* 设置页改权重：高 3 -> 5 */
      document.querySelector('[data-tab="v-set"]').click();
      out('setTab=' + document.querySelector('.view.active').id);
      out('workWN=' + (document.getElementById('workWN') || {}).textContent);
      var hi = document.getElementById('workHigh');
      out('hiVal=' + hi.value);
      hi.value = '5';
      hi.dispatchEvent(new Event('change', { bubbles: true }));
      out('afterW=' + JSON.stringify(PB.workW()));
      out('ptsHighAfter=' + PB.workPts({ work: 'high' }));
      document.querySelector('[data-tab="v-plan"]').click();
      document.getElementById('btnGen').click();
      var r2 = PB.state().lastResult;
      out('pts2=' + (r2.rows || []).map(function (x) { return x.pts; }).join(','));
      out('tblHead=' + ((PB.resultTable() || [[]])[0] || []).join('|'));
      var tb = PB.resultTable() || [];
      out('tblWorkCol=' + tb.slice(1, 4).map(function (row) { return row[8]; }).join(' / '));
      out('ERRS=' + ((window.__ERRS || []).join(' ; ') || 'none'));
    } catch (e) {
      out('ERR ' + e.message);
      out('ERRS=' + ((window.__ERRS || []).join(' ; ') || 'none'));
    }
  }
  if (document.readyState === 'complete') setTimeout(run, 400);
  else window.addEventListener('load', function () { setTimeout(run, 400); });
  setTimeout(run, 4000);
})();
</script>'''

i = html.find('<script>window.__PAIBAN_DATA__')
html = html[:i] + ERRTRAP + html[i:]
j = html.rfind('</body>')
html = html[:j] + TEST + html[j:]
io.open(OUT, 'w', encoding='utf-8').write(html)
print('out=' + OUT)
