"""Audit logging utility — call from services to record actions."""

from typing import Any

from sqlalchemy.ext.asyncio import AsyncSession

from app.models.audit import AuditLog


async def log_action(
    db: AsyncSession,
    *,
    user_id: int | None,
    spbu_id: int | None = None,
    aksi: str,
    modul: str,
    object_id: int | None = None,
    detail: dict[str, Any] | None = None,
) -> None:
    """
    Record an audit log entry.

    Common aksi values: create, update, delete, submit, recall, review,
    approve, reject, unlock, import, pemindahan.
    """
    entry = AuditLog(
        user_id=user_id,
        spbu_id=spbu_id,
        aksi=aksi,
        modul=modul,
        object_id=object_id,
        detail=detail,
    )
    db.add(entry)
