"""撈最近 24 小時 Robert 發的訊息 + 對應 activity,看哪步走錯。"""
import os, sys
ENV = "/volume1/homes/robertsu/coba/app/.env"
if os.path.exists(ENV):
    for l in open(ENV):
        if "=" in l and not l.startswith("#"):
            k, v = l.strip().split("=", 1); os.environ.setdefault(k, v)
sys.path.insert(0, "/volume1/homes/robertsu/coba/app")

import asyncio
from datetime import datetime, timedelta, timezone
from sqlalchemy import select, desc
from app.database import AsyncSessionLocal
from app.models.channel import Message
from app.models.user import User
from app.models.agent_activity import AgentActivity


async def main():
    async with AsyncSessionLocal() as db:
        robert = (await db.execute(
            select(User).where(User.email == "ssbb30529@gmail.com")
        )).scalar_one_or_none()
        if not robert:
            print("❌ 找不到 Robert"); return

        # 過去 24h Robert 在群組發的訊息(>30 字偏 reflection 的)
        cutoff = datetime.now(timezone.utc) - timedelta(hours=24)
        msgs = (await db.execute(
            select(Message).where(
                Message.user_id == robert.id,
                Message.created_at >= cutoff,
                Message.deleted_at.is_(None),
            ).order_by(desc(Message.created_at))
        )).scalars().all()

        print(f"=== Robert 過去 24h 發了 {len(msgs)} 則 ===\n")
        for m in msgs:
            print(f"--- {m.created_at} (msg_id={str(m.id)[:8]}) ---")
            print(f"  「{m.content[:200]}」\n")

            # 對應的 activity
            related = (await db.execute(
                select(AgentActivity).order_by(desc(AgentActivity.created_at)).limit(60)
            )).scalars().all()
            for a in related:
                if (a.extra or {}).get("message_id") == str(m.id) or \
                   (a.extra or {}).get("from_message_id") == str(m.id):
                    e = a.extra or {}
                    cost = f" ${a.cost_usd:.4f}" if a.cost_usd else ""
                    extras = []
                    if "is_task" in e: extras.append(f"is_task={e.get('is_task')} conf={e.get('confidence')}")
                    if "category" in e: extras.append(f"cat={e.get('category')} imp={e.get('importance')}")
                    if "title" in e and a.activity_type == "task_extract": extras.append(f"title={e.get('title')!r}")
                    if "task_id" in e: extras.append(f"task_id={e.get('task_id')[:8]}")
                    extras_str = " | ".join(extras)
                    print(f"  → [{a.activity_type:20s}] {a.summary[:60]}{cost}")
                    if extras_str:
                        print(f"    {extras_str}")
            print()


asyncio.run(main())
