#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""后端：归属补充映射（数据/dept_overrides.json）并入 _sales_dept_map()。"""
import io
import os
import shutil
import sys
import time

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
F = os.path.join(ROOT, '脚本', '销售工作台服务.py')

OLD = """    except Exception:
        pass
    return m


TD_SCOPE = {"""

NEW = """    except Exception:
        pass
    for _nm, _v in _dept_overrides().items():
        if _nm in m or not isinstance(_v, dict):
            continue                       # 用户表优先；本表只填空缺
        _raw = (_v.get('dept') or '').strip()
        if not _raw:
            continue
        _dept, _region = DEPT_SPLIT.get(_raw, (_raw, ''))
        m[_nm] = (_dept, (_v.get('region') or _region or '').strip())
    return m


TD_SCOPE = {"""

HELPER_ANCHOR = "def _sales_dept_map():"
HELPER = '''def _dept_overrides():
    """归属补充映射（数据/dept_overrides.json）。

    给不在 user_roles 的人（离职/历史账号）指定部门与区域，**仅供统计归属**——
    刻意与 user_roles 分离，避免为只做归属统计的人造出登录账号。用户表优先。
    """
    try:
        with open(os.path.join(DATA_DIR, 'dept_overrides.json'), encoding='utf-8') as f:
            d = json.load(f)
        return {k: v for k, v in d.items() if not k.startswith('_') and isinstance(v, dict)}
    except Exception:
        return {}


'''


def main():
    apply = '--apply' in sys.argv
    s = io.open(F, encoding='utf-8').read()
    print('归属补充映射 —— %s\n' % ('APPLY' if apply else 'DRY-RUN'))
    ok = True
    for label, old, new in [('A 加载器', HELPER_ANCHOR, HELPER + HELPER_ANCHOR),
                            ('B 并入映射', OLD, NEW)]:
        n = s.count(old)
        print('  %s %-14s 命中 %d' % ('✅' if n == 1 else '❌', label, n))
        if n != 1:
            ok = False
        else:
            s = s.replace(old, new, 1)
    if not ok:
        return 1
    if apply:
        bak = os.path.join(ROOT, '_bak_p2c_override_%s' % time.strftime('%Y%m%d-%H%M%S'))
        os.makedirs(bak, exist_ok=True)
        shutil.copy2(F, os.path.join(bak, os.path.basename(F)))
        io.open(F, 'w', encoding='utf-8').write(s)
        print('\n  已写（备份 %s）' % bak)
    return 0


sys.exit(main())
