#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生命科学部 · 销售员 → 区域（广东 / 浙江）映射 —— 唯一权威源（三部门逐月看板）。

口径（用户 2026-10-06 拍板）：
  生命科学部年度目标 600 万 = 广东 300 + 浙江 300；两区各 9 人（有 2026 订单者）。
  区域取自《统一工作台运行及授权.xlsx》「人员清单」的『区域』列：
    区域含「广州」→ 广东；区域含「浙江」→ 浙江（如 "管培生-浙江" 亦归浙江）。

静态表覆盖「人员清单」中生命科学销售部的全部在职/离职人员；若静态表缺名，
可由本模块的 load_from_org() 从组织架构 xlsx 兜底补齐（文件不存在时静默跳过）。

提供：
  LS_REGION / region_of(name) / REGION_MANAGER / meta_block()
"""
import os

# 广东省（广州科研*）：9 人（含在职 韩远怀/黄建华/王诗香/刘斌 + 离职者）
# 浙江省（浙江科研*）：10 人（含在职 吴云/袁殿果/叶信福/侯海瑜 + 离职者；李仁钰无 2026 订单）
LS_REGION = {
    # 广东
    "韩远怀": "广东", "黄建华": "广东", "王诗香": "广东", "刘斌": "广东",
    "肖立": "广东", "梁莹莹": "广东", "段玉": "广东", "黄建佳": "广东", "黄自鑫": "广东",
    "陈彩红": "广东",
    # 浙江
    "吴云": "浙江", "袁殿果": "浙江", "叶信福": "浙江", "侯海瑜": "浙江",
    "赵以诺": "浙江", "曾琪": "浙江", "李岚风": "浙江", "刘静文": "浙江",
    "李仁钰": "浙江", "王慧洁": "浙江",
    # 浙江 · 新增人员（无 2026 订单，2026 年度 KPI 15 万）
    "张晋菲": "浙江",
}

REGIONS = ["广东", "浙江"]

# 区域经理（缺口按区域摊给区域经理）
REGION_MANAGER = {"广东": "韩远怀", "浙江": "吴云"}

ORG_XLSX = os.path.expanduser(
    "~/Desktop/hermas输入-工作台数据库/销售组织架构/统一工作台运行及授权.xlsx")


def _norm(r):
    r = str(r or "")
    if "浙江" in r:
        return "浙江"
    if "广州" in r or "广东" in r:
        return "广东"
    return None


def load_from_org():
    """可选：从组织架构「人员清单」补齐静态表缺名（失败静默返回 {}）。"""
    try:
        import pandas as pd
        df = pd.read_excel(ORG_XLSX, sheet_name="人员清单", dtype=str)
        out = {}
        for _, r in df.iterrows():
            if "生命科学" not in str(r.get("部门", "")):
                continue
            nm = str(r.get("销售员", "")).strip()
            rg = _norm(r.get("区域", ""))
            if nm and rg:
                out[nm] = rg
        return out
    except Exception:
        return {}


def _merged_map():
    m = dict(LS_REGION)
    for k, v in load_from_org().items():
        m.setdefault(k, v)
    return m


_REGION_MAP = None


def region_of(name):
    """销售员名 → '广东' / '浙江'；未知返回 None。"""
    global _REGION_MAP
    if _REGION_MAP is None:
        _REGION_MAP = _merged_map()
    if not name:
        return None
    return _REGION_MAP.get(str(name).strip())


def meta_block():
    m = _merged_map()
    gd = sorted(k for k, v in m.items() if v == "广东")
    zj = sorted(k for k, v in m.items() if v == "浙江")
    return {
        "rule": "生命科学部 600 万 = 广东 300 + 浙江 300；区域取自《统一工作台运行及授权.xlsx》"
                "「人员清单」『区域』列（含「广州」→广东、含「浙江」→浙江）。",
        "region_map": m,
        "manager": dict(REGION_MANAGER),
        "members": {"广东": gd, "浙江": zj},
        "source": "用户 2026-10-06 拍板（生命科学部 900→600 万，广东/浙江各 300）",
    }
