from __future__ import annotations

from datetime import timedelta

from app import store
from app.util import parse_time

_ACTIVE = {"queued", "preparing", "audio", "transcript"}


def purge(retention_hours: int) -> int:
    from datetime import datetime, timezone

    cutoff = datetime.now(timezone.utc) - timedelta(hours=retention_hours)
    removed = 0
    for job in store.list_jobs():
        if job.get("status") in _ACTIVE:
            continue
        created = job.get("created_at")
        if not created:
            continue
        try:
            stamp = parse_time(created)
        except ValueError:
            continue
        if stamp.tzinfo is None:
            stamp = stamp.replace(tzinfo=timezone.utc)
        if stamp < cutoff:
            store.delete(job["id"])
            removed += 1
    return removed
