import asyncio
from datetime import datetime
from sqlalchemy import select, or_
from database.db import async_session
from database.models import Order, PaymentStatus, LinkPool

async def cleanup_old_expired_orders():
    now = datetime.utcnow()
    async with async_session() as session:
        # پیدا کردن سفارش‌هایی که تاریخ انقضای آن‌ها گذشته یا وضعیتشان expired است
        res = await session.execute(
            select(Order).where(
                or_(
                    Order.expiration_date <= now,
                    Order.payment_status == PaymentStatus.expired
                )
            )
        )
        old_expired_orders = res.scalars().all()

        if not old_expired_orders:
            print("ℹ️ هیچ سفارش منقضی‌شده‌ای برای پاک‌سازی یافت نشد.")
            return

        for order in old_expired_orders:
            # ۱. حذف کامل لینک مربوطه از دیتابیس
            if order.assigned_link_id:
                link = await session.get(LinkPool, order.assigned_link_id)
                if link:
                    await session.delete(link)
            elif order.assigned_link:
                link_res = await session.execute(
                    select(LinkPool).where(LinkPool.url == order.assigned_link)
                )
                link = link_res.scalar_one_or_none()
                if link:
                    await session.delete(link)

            # ۲. حذف کامل خود سفارش
            await session.delete(order)

        await session.commit()
        print(f"🧹 تعداد {len(old_expired_orders)} سفارش منقضی‌شده و لینک‌های آن‌ها با موفقیت پاک‌سازی شدند.")

if __name__ == "__main__":
    asyncio.run(cleanup_old_expired_orders())