#!/usr/bin/env python3
"""Daily KPI progress update from MCP sales data"""
import subprocess, json, os

TK='m-abfb29e8-3104-434f-9944-8d0bb592f8cd'
PK='6593cd71471290e3cc6be6e6'
BASE=os.path.dirname(os.path.abspath(__file__))

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=60)
    d=json.loads(r.stdout)
    if d['result'].get('isError'): return None
    for c in d['result']['content']:
        t=c.get('text','')
        if 'log_id' in t: continue
        try: return json.loads(t)
        except: return None
    return None

# Pull this month's sales
from datetime import datetime
now=datetime.now()
month_start=f'{now.year}-{now.month:02d}-01'
today=f'{now.year}-{now.month:02d}-{now.day:02d}'

# Get sales for current month
all_orders=[]
page=1
while True:
    r=mcp('search_by_mql',{
        'project_key':PK,
        'mql':f'SELECT `单据编号`,`金额`,`创建者` FROM `销售管理`.`销售订单` WHERE `创建时间` >= "{month_start}" ORDER BY `创建时间` DESC LIMIT 200 OFFSET {(page-1)*200}'
    })
    if not r: break
    items=r.get('data',{}).get('销售订单',[]) or []
    if not items: break
    for item in items:
        fields={}
        for f in item.get('moql_field_list',[]):
            k=f['name']; vv=list(f.get('value',{}).values()); v=vv[0] if vv else ''
            fields[k]=v
        try: fields['金额']=float(fields.get('金额','0'))
        except: fields['金额']=0
        all_orders.append(fields)
    if len(items)<200: break
    page+=1

total_amt=sum(o['金额'] for o in all_orders)
creator_map={}
for o in all_orders:
    c=o.get('创建者','')
    creator_map[c]=creator_map.get(c,0)+o['金额']

# Save
result={
    'updated':today,
    'month':f'{now.year}-{now.month:02d}',
    'month_orders':len(all_orders),
    'month_total':round(total_amt,2),
    'by_creator':{k:round(v,2) for k,v in sorted(creator_map.items(),key=lambda x:-x[1])[:20]}
}

with open(os.path.join(BASE,'数据/kpi_progress.json'),'w') as f:
    json.dump(result,f,ensure_ascii=False)

print(f'{today}: {len(all_orders)} orders, {total_amt:,.0f} total')
