#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
经理口径收口 · 第三批
=====================
 1) 区域经理（生命科学浙江/广东）KPI 再按人事表 region 收一道（原会拿到整个生命科学部）
 2) index.html 商机沙盘：manager 看本部门（原「非admin=只看自己」）
 3) index.html 订单管理：manager 看本部门订单；非 admin/gm 不再展示全公司本年合计
"""
import io, sys, shutil
PC, MB = '工具/index.html', '工具/app.html'
APPLY = '--apply' in sys.argv

# ── ① 区域收窄（两文件同文）──
OLD_FIT = """    var _fit = function(x) {
      if (normDeptName(x.dept || x.department) !== _nd) return false;
      if (_region && x.region && String(x.region).indexOf(_region) < 0) return false;
      return true;
    };"""
NEW_FIT = """    var _regNames = null;
    if (_region) {
      _regNames = ((state.data.personnel || {}).personnel || []).filter(function(x) {
        var rg = String((x && x.region) || '');
        if (!rg) return false;
        return _region === '浙江' ? rg.indexOf('浙江') >= 0 : (rg.indexOf('广东') >= 0 || rg.indexOf('广州') >= 0);
      }).map(function(x) { return x.name; });
      if (!_regNames.length) _regNames = null;
    }
    var _fit = function(x) {
      if (normDeptName(x.dept || x.department) !== _nd) return false;
      if (_regNames && _regNames.indexOf(x.name) < 0) return false;
      if (_region && x.region && String(x.region).indexOf(_region) < 0) return false;
      return true;
    };"""

# ── ②/③ index 专属 ──
OLD_OPP = """  var oppUserName = (state.user || {}).name;
  if (oppUserName && ((state.user || {}).role !== 'admin')) {
    opps = opps.filter(function(o) { return o.sales === oppUserName; });
  }"""
NEW_OPP = """  var oppUserName = (state.user || {}).name;
  var _scOpp = deptScope();
  if (_scOpp) {
    opps = opps.filter(function(o) { return inScope(_scOpp, o.sales); });
  }"""

OLD_ORD = """  var uname = (state.user||{}).name;
  if (uname && ((state.user||{}).role!=='admin')) {
    orders = orders.filter(function(o) { return o.creator===uname; });
  }"""
NEW_ORD = """  var uname = (state.user||{}).name;
  var _scOrd = deptScope();
  if (_scOrd) {
    orders = orders.filter(function(o) { return inScope(_scOrd, o.creator); });
  }"""

OLD_FYT = "  var fullYearTax = (dash.total_h1 || 0) + ((_shipProgM === new Date().getMonth() + 1) ? (prog.total || 0) : 0);"
NEW_FYT = """  var _roleO = (state.user || {}).role;
  var fullYearTax;
  if (_roleO === 'admin' || _roleO === 'gm') {
    fullYearTax = (dash.total_h1 || 0) + ((_shipProgM === new Date().getMonth() + 1) ? (prog.total || 0) : 0);
  } else {
    fullYearTax = orders.reduce(function(s2, o) { return s2 + (parseFloat(o.taxTotal || o.amount || 0) || 0); }, 0);
  }"""

def do(path, pairs):
    s = io.open(path, encoding='utf-8').read()
    n = 0
    for old, new, tag in pairs:
        if old in s:
            s = s.replace(old, new, 1); n += 1; print('  ✅ %s  %s' % (path.split('/')[-1], tag))
        else:
            print('  ⏭  %s  %s（锚点已处理或不匹配）' % (path.split('/')[-1], tag))
    if APPLY and n:
        io.open(path, 'w', encoding='utf-8').write(s)
    return n

shutil.copy(PC, PC + '.bak_before_mgr3')
shutil.copy(MB, MB + '.bak_before_mgr3')
t = 0
t += do(PC, [(OLD_FIT, NEW_FIT, 'KPI·区域经理按人事表区域收窄'),
             (OLD_OPP, NEW_OPP, '商机沙盘·经理看本部门'),
             (OLD_ORD, NEW_ORD, '订单管理·经理看本部门'),
             (OLD_FYT, NEW_FYT, '订单·本年合计按作用域计算')])
t += do(MB, [(OLD_FIT, NEW_FIT, 'KPI·区域经理按人事表区域收窄'),
             (OLD_FYT, NEW_FYT, '订单·本年合计按作用域计算')])
print('\n  %s 共 %d 处' % ('📦 已写入' if APPLY else '（预演）', t))
