#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
从飞书项目MQL拉取"客户级别"(大客户/重点客户)和"客户等级"(A/B/C/D类)
输出：数据/customer_levels.json  { "客户名": {"level":"大客户","tier":"A类"}, ... }
可加入日常刷新管道（cb_sync.sh）
"""
import subprocess, json, os, time

TK = "m-abfb29e8-3104-434f-9944-8d0bb592f8cd"
SALES_PK = "6593cd71471290e3cc6be6e6"
BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
OUT = os.path.join(BASE, '数据', 'customer_levels.json')

def mcp(method, args, timeout=60):
    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)
    d = json.loads(r.stdout)
    for c in d['result']['content']:
        t = c['text']
        if t.strip().startswith('{'):
            return json.loads(t)
    return None

def parse_rows(result):
    """解析 moql_field_list 结构 → [{name, level, tier}]"""
    rows = []
    data = (result or {}).get('data') or {}
    for gid, items in data.items():
        for it in items:
            row = {}
            for f in it.get('moql_field_list', []):
                k = f.get('key')
                v = f.get('value')
                if k == 'name' and v:
                    row['name'] = (v.get('string_value') or '').strip()
                elif k in ('field_c8e80d', 'field_17186c') and v:
                    klv = v.get('key_label_value') or {}
                    row['level' if k == 'field_c8e80d' else 'tier'] = klv.get('label', '')
            if row.get('name'):
                rows.append(row)
    return rows

def main():
    all_rows = []
    for page in range(10):
        mql = ("SELECT `name`, `field_c8e80d`, `field_17186c` FROM `销售管理`.`客户` "
               f"WHERE `field_c8e80d` is not null LIMIT 50 OFFSET {page*50}")
        result = mcp("search_by_mql", {"project_key": SALES_PK, "mql": mql})
        rows = parse_rows(result)
        print(f"第{page+1}页: {len(rows)}条")
        if not rows:
            break
        all_rows.extend(rows)
        if len(rows) < 50:
            break
        time.sleep(0.3)

    out = {}
    for r in all_rows:
        if r['name'].lower() == 'test':
            continue
        out[r['name']] = {'level': r.get('level', ''), 'tier': r.get('tier', '')}
    json.dump(out, open(OUT, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)
    from collections import Counter
    dist = Counter(v['level'] for v in out.values())
    print(f"✅ {len(out)} 个带级别客户 → customer_levels.json  分布: {dict(dist)}")

if __name__ == '__main__':
    main()
