import logging
from datetime import datetime, timezone

from sqlalchemy import delete

from app.db.engine import AsyncSessionLocal
from app.models.active_session import ActiveSession
from app.models.patient_lock import PatientLock
from app.models.patient import Patient

logger = logging.getLogger(__name__)


async def purge_expired() -> None:
    async with AsyncSessionLocal() as db:
        now = datetime.now(timezone.utc)

        r1 = await db.execute(delete(ActiveSession).where(ActiveSession.expires_at < now))
        r2 = await db.execute(delete(PatientLock).where(PatientLock.expires_at < now))
        r3 = await db.execute(delete(Patient).where(Patient.expires_at < now))

        await db.commit()

        logger.info(
            "Purge complete — active_sessions: %d, patient_locks: %d, patients: %d",
            r1.rowcount, r2.rowcount, r3.rowcount,
        )
