from sqlalchemy.orm import Session

from app.models.audit import AuditLog
from app.models.org import User


def record_audit(
    db: Session,
    user: User,
    action: str,
    resource_type: str,
    resource_id: object | None = None,
    metadata: dict | None = None,
) -> None:
    """Call after the main mutation's own commit — self-commits so callers don't need
    to reorder their existing transaction handling."""
    log = AuditLog(
        org_id=user.org_id,
        user_id=user.id,
        action=action,
        resource_type=resource_type,
        resource_id=str(resource_id) if resource_id is not None else None,
        log_metadata=metadata or {},
    )
    db.add(log)
    db.commit()
