#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""8月活动+客诉 按部门分析：大客户部 / 生命科学-广东(广州) / 生命科学-浙江"""
import subprocess, json, re
from collections import defaultdict, Counter

TK = "m-abfb29e8-3104-434f-9944-8d0bb592f8cd"
SALES_PK = "6593cd71471290e3cc6be6e6"
BASE = "/Users/liuxinyuan/Desktop/Hermes输出-工作类/数据"

def mcp(method, args, timeout=40):
    r = subprocess.run(['curl','-s','--resolve','project.feishu.cn:443:120.233.177.47',
        '-X','POST','https://project.feishu.cn/mcp_server/v1',
        '-H',f'X-Mcp-Token: {TK}','-H','Content-Type: application/json',
        '-d', json.dumps({"jsonrpc":"2.0","method":"tools/call","params":{"name":method,"arguments":args},"id":1})],
        capture_output=True, text=True, timeout=timeout)
    try:
        d = json.loads(r.stdout)
    except:
        return None
    result = None
    for c in d.get('result', {}).get('content', []):
        t = c.get('text','')
        if 'log_id' in t: continue
        if t.startswith('{'):
            try: result = json.loads(t)
            except: pass
    return result

def parse_items(result):
    items = []
    if not result: return items
    for gid, gitems in result.get('data', {}).items():
        for item in gitems:
            f = {}
            for mf in item.get('moql_field_list', []):
                k = mf.get('name', mf.get('key',''))
                vdict = mf.get('value', {})
                vals = list(vdict.values()) if vdict else ['']
                v = vals[0] if vals else ''
                if isinstance(v, dict):
                    v = list(v.values())[0] if v else ''
                f[k] = v if v is not None else ''
            items.append(f)
    return items

# 活动类型 = 65ae1e5d44338dbe7c39a29a
ACT = "65ae1e5d44338dbe7c39a29a"
# 拉8月活动，带跟进部门字段
MQL = (f"SELECT `名称`, description, `创建时间`, `跟进部门`, `创建者`, work_item_id "
       f"FROM `销售管理`.`{ACT}` "
       f"WHERE `创建时间` >= \"2026-08-01\" AND `创建时间` < \"2026-09-01\" "
       f"ORDER BY `创建时间` ASC")

all_items = []
seen = set()
page = 0
while page < 100:
    mql = f"{MQL} LIMIT 50 OFFSET {page*50}"
    res = mcp("search_by_mql", {"project_key": SALES_PK, "mql": mql})
    items = parse_items(res)
    if not items:
        break
    for it in items:
        key = (it.get('名称',''), it.get('创建时间',''))
        if key in seen: continue
        seen.add(key)
        all_items.append(it)
    page += 1
    if len(items) < 50:
        break

print("=== 8月活动总数:", len(all_items), "===")

# 跟进部门编码分布
dept_counter = Counter()
for it in all_items:
    d = it.get('跟进部门','') or '(空)'
    dept_counter[d] += 1
print("\n跟进部门编码分布:")
for k,v in dept_counter.most_common():
    print(f"  {k}: {v}")

# 已知编码映射
CODE2DEPT = {
    'sp46mkhje': '大客户部',
    'i4l86_tn6': '生命科学-浙江',
    '591s4k2uz': '生命科学-广东',
    '2o467stav': '诊断原料销售部',
}
# 输出三个目标部门的详细内容
targets = ['sp46mkhje', 'i4l86_tn6', '591s4k2uz']
out = {}
for code in targets:
    acts = [it for it in all_items if it.get('跟进部门','') == code]
    out[code] = acts
    print(f"\n{'='*60}")
    print(f"### {CODE2DEPT.get(code, code)} — {len(acts)} 条")
    print(f"{'='*60}")

# 保存到文件供后续分析
with open(f'{BASE}/_aug_analysis_raw.json', 'w', encoding='utf-8') as fp:
    json.dump(all_items, fp, ensure_ascii=False, default=str)

# 打印每个部门的活动名称+描述（截断）
for code in targets:
    acts = out[code]
    print(f"\n\n########## {CODE2DEPT.get(code,code)} 明细 ({len(acts)}条) ##########")
    for it in acts:
        nm = it.get('名称','') or ''
        desc = it.get('description','') or ''
        ct = it.get('创建时间','')[:10]
        line = f"[{ct}] {nm}"
        if desc:
            line += f" | {desc}"
        print(line[:300])
