#!/usr/bin/env python3
"""MCP客户数据全量拉取（含新字段field_8c870a联系人数量等）
用法: python3 pull_customers.py
"""
import subprocess, json, os
from datetime import datetime

TK = "m-abfb29e8-3104-434f-9944-8d0bb592f8cd"
PK = "6593cd71471290e3cc6be6e6"  # 销售管理
BASE = os.path.dirname(os.path.abspath(__file__))
OUTPUT = os.path.join(BASE, "mcp_customers.json")

def mcp(method, args):
    r = subprocess.run(['curl','-s','-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=30)
    try:
        d = json.loads(r.stdout)
        if 'error' in d: return None
        for c in d['result']['content']:
            t = c.get('text','')
            if 'log_id' in t: continue
            return json.loads(t)
    except: return None

def parse_items(result):
    items = []
    if not result: return items
    for gid, gitems in result.get('data', {}).items():
        for item in gitems:
            fields = {}
            for f in item.get('moql_field_list', []):
                k = f['key']
                v = f.get('value')
                if v is None: fields[k] = ''
                elif 'string_value' in v: fields[k] = v['string_value']
                elif 'long_value' in v: fields[k] = v['long_value']
                elif 'user_value' in v: fields[k] = v['user_value']
                elif 'user_value_list' in v: fields[k] = v['user_value_list']
                elif 'key_label_value' in v: fields[k] = v['key_label_value']
                elif 'key_label_value_list' in v: fields[k] = v['key_label_value_list']
                else: fields[k] = ''
            items.append(fields)
    return items

COLUMNS = 'name, field_c3224b, field_5ed7ab, field_c8e80d, field_17186c, field_8c870a, field_79aa0b, field_6415cf, work_item_id, field_e62869, owner, current_status_operator'

all_items = []
seen = set()
page = 0
print(f"[{datetime.now().strftime('%H:%M:%S')}] 拉取客户数据...")
while page < 50:
    offset = page * 50
    mql = f"SELECT {COLUMNS} FROM `销售管理`.`客户` ORDER BY name ASC LIMIT 50 OFFSET {offset}"
    result = mcp("search_by_mql", {"project_key": PK, "mql": mql})
    if not result: break
    items = parse_items(result)
    if not items: break
    new = []
    for i in items:
        wid = str(i.get('work_item_id', ''))
        if wid and wid not in seen:
            seen.add(wid)
            new.append(i)
    all_items.extend(new)
    page += 1
    if len(items) < 50: break
    if page % 5 == 0:
        print(f"  page {page}: +{len(new)} (total {len(all_items)})")

print(f"  共 {len(all_items)} 条")

std = {
    'updated_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    'customers': all_items,
}

with open(OUTPUT, 'w', encoding='utf-8') as f:
    json.dump(std, f, ensure_ascii=False)

print(f"✅ 写入 {OUTPUT} ({len(all_items)} 条)")
