"""撈最近 task_create_auto + 對應原始訊息,找哪些被誤建。"""
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 uuid import UUID
from sqlalchemy import select, desc
from app.database import AsyncSessionLocal
from app.models.task import Task
from app.models.channel import Message
from app.models.agent_activity import AgentActivity
from app.models.user import User


async def main():
    cutoff = datetime.now(timezone.utc) - timedelta(hours=24)
    async with AsyncSessionLocal() as db:
        acts = (await db.execute(
            select(AgentActivity).where(
                AgentActivity.activity_type == "task_create_auto",
                AgentActivity.created_at >= cutoff,
            ).order_by(desc(AgentActivity.created_at))
        )).scalars().all()

        print(f"=== 過去 24h 自動建任務 {len(acts)} 筆 ===\n")
        for a in acts:
            e = a.extra or {}
            tid = e.get("task_id")
            from_msg_id = e.get("from_message_id")
            via = e.get("via", "extract")
            # 找 task
            task = None
            if tid:
                try:
                    task = (await db.execute(select(Task).where(Task.id == UUID(tid)))).scalar_one_or_none()
                except (ValueError, TypeError):
                    pass
            # 找原始訊息
            src = None
            if from_msg_id:
                try:
                    src = (await db.execute(select(Message).where(Message.id == UUID(from_msg_id)))).scalar_one_or_none()
                except (ValueError, TypeError):
                    pass
            # 找 sender 名字
            sender = "?"
            if src and src.user_id:
                u = (await db.execute(select(User).where(User.id == src.user_id))).scalar_one_or_none()
                if u: sender = u.display_name

            print(f"--- {a.created_at} via={via} ---")
            if task:
                deleted = " (已刪)" if task.deleted_at else ""
                print(f"  task title:   「{task.title}」 status={task.status}{deleted}")
            else:
                print(f"  task_id={tid} (找不到 task)")
            if src:
                print(f"  原始訊息([{sender}]): 「{(src.content or '')[:200]}」")
            else:
                print(f"  原始訊息: (找不到)")
            print(f"  conf={e.get('confidence')}")
            print()


asyncio.run(main())
