# -*- coding: utf-8 -*-
"""任务类型词表的端到端自检：生成 _tt_e2e.html"""
import io, html as H

ROOT = r'D:\workbbbbbb'
SRC = ROOT + r'\排班工具.html'
OUT = ROOT + r'\build\_tt_e2e.html'

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

TEST = r"""
<script>
(function () {
  function out(s) {
    var d = document.getElementById('E2E');
    if (!d) { d = document.createElement('div'); d.id = 'E2E'; document.body.appendChild(d); }
    d.textContent += s;
  }
  var done = false;
  function run() {
    if (done) return; done = true;
    try {
      var sb = document.querySelector('[data-tab="v-set"]');
      out('setBtn=' + (!!sb) + ' || ');
      sb.click();
      out('tab=' + (document.querySelector('#v-set.active') ? 'v-set' : 'no') + ' || ');
      out('ttN=' + (document.getElementById('taskTypeN') || {}).textContent + ' || ');
      var rows = document.querySelectorAll('#taskTypeAdmin .row[data-tt]');
      out('rows=' + rows.length + ' || ');
      out('groups=' + document.querySelectorAll('#taskTypeAdmin .t2').length + ' || ');
      out('firstCat=' + (document.querySelectorAll('#taskTypeAdmin .t2')[0] || {}).textContent + ' || ');
      var inp = document.querySelector('#taskTypeAdmin .row[data-tt] input[data-ttf="name"]');
      out('first=' + (inp ? inp.value : 'none') + ' || ');
      if (inp) {
        inp.value = '交接/测试';
        inp.dispatchEvent(new Event('change', { bubbles: true }));
      }
      var st = JSON.parse(localStorage.getItem('paiban_state_v1') || 'null');
      out('saved=' + (st && st.taskTypes ? st.taskTypes[0].name : 'no') + ' || ');
      out('lsN=' + (st && st.taskTypes ? st.taskTypes.length : 0) + ' || ');
      out('rowsAfterSave=' + document.querySelectorAll('#taskTypeAdmin .row[data-tt]').length + ' || ');
      document.getElementById('btnAddTaskType').click();
      out('rowsAfterAdd=' + document.querySelectorAll('#taskTypeAdmin .row[data-tt]').length + ' || ');
      out('ttNAfter=' + document.getElementById('taskTypeN').textContent + ' || ');
      var del = document.querySelector('#taskTypeAdmin [data-ttdel]');
      del.click();
      out('rowsAfterDel=' + document.querySelectorAll('#taskTypeAdmin .row[data-tt]').length + ' || ');
      out('copyBtn=' + (!!document.getElementById('btnCopyTaskType')) + ' || ');
      out('resetBtn=' + (!!document.getElementById('btnResetTaskType')) + ' || ');
      out('ERRS=' + ((window.__ERRS || []).join(' ; ') || 'none'));
    } catch (e) {
      out('ERR ' + e.message + ' @@ ' + String(e.stack || '').slice(0, 300));
      out('ERRS=' + ((window.__ERRS || []).join(' ; ') || 'none'));
    }
  }
  if (document.readyState === 'complete') run();
  else window.addEventListener('load', function () { setTimeout(run, 300); });
  setTimeout(run, 4000);
})();
</script>
"""


def main():
    with io.open(SRC, 'r', encoding='utf-8') as f:
        doc = f.read()
    i = doc.find('<script>window.__PAIBAN_DATA__')
    if i < 0:
        raise SystemExit('data script not found')
    doc = doc[:i] + ERRTRAP + doc[i:]
    j = doc.rfind('</body>')
    doc = doc[:j] + TEST + doc[j:]
    with io.open(OUT, 'w', encoding='utf-8') as f:
        f.write(doc)
    print('wrote', OUT, len(doc))


if __name__ == '__main__':
    main()
