"""Celery task: expire stale checkout links every hour."""
import logging

from src.worker.celery_app import celery_app

logger = logging.getLogger(__name__)


@celery_app.task(name="checkout.expire_stale_checkouts")
def expire_stale_checkouts():
    """
    Runs every hour. Marks ACTIVE checkouts past their expires_at as EXPIRED.
    Emits CheckoutExpiredEvent for each.
    """
    from src.core.database import SessionCelery
    from src.apps.checkouts.services import expire_stale_checkouts as expire_service

    try:
        with SessionCelery() as db:
            count = expire_service(db)
        logger.info("expire_stale_checkouts: expired %d checkout(s)", count)
        return {"expired": count}
    except Exception as exc:
        logger.error("expire_stale_checkouts: error: %s", exc)
        raise
