#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""yy_wenlaoyang_stats.py — 「问问老杨」问题统计（答疑选题雷达）
读 ~/yy-workbench-server/logs/yy_wenlaoyang_log.jsonl → 生成 md 统计报告 + 终端摘要
用法：python3 yy_wenlaoyang_stats.py   （launchd 每天 8:17 自动跑）
"""
import json, os
from collections import Counter

_DIR = os.path.dirname(os.path.abspath(__file__))  # 跟脚本走：Mac 或 /opt/wenlaoyang 都对
LOG = os.path.join(_DIR, "logs", "yy_wenlaoyang_log.jsonl")
OUT = os.path.join(_DIR, "logs", "yy_wenlaoyang_stats.md")
KW = {"获客/流量": ["获客", "客源", "流量", "线索", "留资", "没人知道"],
      "短视频/直播": ["抖音", "短视频", "直播", "视频号", "快手", "拍视频"],
      "小红书/私域": ["小红书", "私域", "微信", "社群", "朋友圈", "加微"],
      "定价/利润": ["定价", "多少钱", "利润", "成本", "收费", "降价", "贵"],
      "员工/团队": ["员工", "团队", "招聘", "管理", "合伙人", "离职"],
      "复购/转化": ["复购", "转化", "成交", "回头客", "签单", "不买"],
      "门店/本地": ["店", "到店", "餐厅", "餐饮", "本地", "门店", "美容", "理发"],
      "AI应用": ["AI", "人工智能", "数字人", "GPT", "智谱", "DeepSeek"]}

rows = []
if os.path.exists(LOG):
    for line in open(LOG, encoding="utf-8"):
        try:
            rows.append(json.loads(line))
        except Exception:
            pass
users = [r for r in rows if r.get("role") == "user"]
reports = [r for r in rows if r.get("role") == "report"]
sessions = {r.get("session", "") for r in rows}
kw = Counter()
for r in users:
    c = r.get("content", "")
    for cat, kws in KW.items():
        if any(k in c for k in kws):
            kw[cat] += 1
daily = Counter(r.get("ts", "")[:10] for r in users)
qs = Counter()
for r in users:
    qs[r.get("session", "")] += 1

lines = [f"# 问问老杨 · 问题统计（{os.path.getmtime(LOG) and __import__('time').strftime('%Y-%m-%d %H:%M')} 更新）" if rows else "# 问问老杨 · 问题统计",
         "",
         f"- 会话数（一次完整诊断=1）：**{len(sessions)}**",
         f"- 用户提问总数：**{len(users)}**",
         f"- 已出诊断报告：**{len(reports)}**",
         f"- 平均每会话提问轮数：**{len(users)/max(len(sessions),1):.1f}**",
         "", "## 高频问题域（答疑选题雷达）", ""]
for cat, n in kw.most_common():
    bar = "█" * min(n, 30)
    lines.append(f"- **{cat}**：{n} 次 {bar}")
lines += ["", "## 每日提问趋势", ""]
for d, n in sorted(daily.items()):
    lines.append(f"- {d}：{n} 问")
# ---------- DeepSeek 余额（低于20元告警） ----------
def ds_balance():
    try:
        import urllib.request
        key = os.environ.get("DEEPSEEK_API_KEY", "")
        if not key:
            return None
        req = urllib.request.Request("https://api.deepseek.com/user/balance",
                                     headers={"Authorization": f"Bearer {key}"})
        with urllib.request.urlopen(req, timeout=15) as resp:
            d = json.load(resp)
        return float(d["balance_infos"][0]["total_balance"])
    except Exception:
        return None

bal = ds_balance()
THRESH = 20.0

fbs = [r for r in rows if r.get("role") == "feedback"]
lines += ["", f"## 用户反馈（{len(fbs)} 条）", ""]
for r in fbs[-10:]:
    lines.append(f"- `{r.get('ts','')[:16]}` {r.get('content','')[:80]}")
lines += ["", "## 最近的问题（选题直接用）", ""]
for r in users[-15:]:
    lines.append(f"- `{r.get('ts','')[:16]}` {r.get('content','')[:60]}")
md = "\n".join(lines)
os.makedirs(os.path.dirname(OUT), exist_ok=True)
open(OUT, "w").write(md)
print(md[:1500])
print(f"\n→ 完整报告: {OUT}")

# ---------- 发飞书 ----------
import urllib.request
HOOK = os.environ.get("FEISHU_WEBHOOK_URL", "")
if HOOK:
    fbs_n = len(fbs)
    warn = "🚨🚨 " if (bal is not None and bal < THRESH) else ""
    summary = [f"{warn}📊 问问老杨 · 每日统计（{__import__('time').strftime('%Y-%m-%d %H:%M')}）", ""]
    summary.append(f"会话 {len(sessions)} | 提问 {len(users)} | 报告 {len(reports)} | 反馈 {fbs_n}")
    if bal is not None:
        if bal < THRESH:
            summary.append(f"💰 DeepSeek 余额：{bal:.2f} 元 —— ⚠️ 低于 {THRESH} 元，请尽快充值！（platform.deepseek.com）")
        else:
            summary.append(f"💰 DeepSeek 余额：{bal:.2f} 元（约 {int(bal/0.03)} 次完整诊断）")
    if kw:
        summary.append("")
        summary.append("🔥 高频问题域（答疑选题）：")
        for i, (cat, n) in enumerate(kw.most_common(5), 1):
            summary.append(f"{i}. {cat} ×{n}")
    if fbs:
        summary.append("")
        summary.append("💬 最新反馈：")
        for r in fbs[-3:]:
            summary.append(f"- {r.get('content','')[:50]}")
    if users:
        summary.append("")
        summary.append("📌 最近一问：" + users[-1].get("content", "")[:40])
    summary.append("")
    summary.append("完整统计已生成（服务器 /opt/wenlaoyang/logs/）")
    try:
        req = urllib.request.Request(HOOK, data=json.dumps({
            "msg_type": "text", "content": {"text": "\n".join(summary)}
        }).encode(), headers={"Content-Type": "application/json"})
        urllib.request.urlopen(req, timeout=15)
        print("→ 飞书已推送")
    except Exception as e:
        print("→ 飞书推送失败:", str(e)[:100])
else:
    print("→ FEISHU_WEBHOOK_URL 未设置，跳过推送")
