"""清掉 sim 測試留下的垃圾任務。"""
import os, sys
ENV = "/volume1/homes/robertsu/coba/app/.env"
if os.path.exists(ENV):
    for line in open(ENV):
        if "=" in line and not line.startswith("#"):
            k, v = line.strip().split("=", 1); os.environ.setdefault(k, v)
sys.path.insert(0, "/volume1/homes/robertsu/coba/app")

import asyncio
from datetime import datetime, timezone
from sqlalchemy import select, or_
from app.database import AsyncSessionLocal
from app.models.task import Task

# 垃圾標題模式
JUNK_PATTERNS = [
    "整理報表 #",
    "[SIM",
    "SIM4",
    "rgs",
    "盤點後台 server 流量",   # 重複的盤點任務,留 1 個
    "盤點官網改版剩餘工作",
    "整理客戶提案 v3 並寄出", # 跟「寄出客戶 A 的提案 v3」重複
    "寄出客戶 A 的提案 v2",   # 舊版本
    "[rgs",
    "測試派工流程",
    "庫柏建立",                # 部分舊測試
]


async def main():
    async with AsyncSessionLocal() as db:
        rows = (await db.execute(
            select(Task).where(Task.deleted_at.is_(None))
        )).scalars().all()

        print(f"目前活著任務數:{len(rows)}")
        to_delete = []
        for t in rows:
            for pat in JUNK_PATTERNS:
                if pat in t.title:
                    to_delete.append(t)
                    break

        # 「盤點後台 server 流量」重複,留 1 個
        seen_titles = set()
        keep_first = []
        final_delete = []
        for t in to_delete:
            if t.title == "盤點後台 server 流量":
                if t.title not in seen_titles:
                    seen_titles.add(t.title)
                    keep_first.append(t)
                    continue
            final_delete.append(t)

        print(f"要刪 {len(final_delete)} 筆:")
        for t in final_delete:
            print(f"  - {t.title!r} (status={t.status} due={t.due_date})")

        if not final_delete:
            print("沒有要刪的"); return

        # 軟刪
        now = datetime.now(timezone.utc)
        for t in final_delete:
            t.deleted_at = now
        await db.commit()
        print(f"\n✓ 軟刪 {len(final_delete)} 筆完成")

        # 確認剩下
        remaining = (await db.execute(
            select(Task).where(Task.deleted_at.is_(None))
        )).scalars().all()
        print(f"\n剩餘 {len(remaining)} 筆任務:")
        for t in remaining:
            print(f"  - {t.title!r} ({t.status})")


asyncio.run(main())
