"""Audit logging helpers for repository documents (PRD §11 Audit Trail)."""

from __future__ import annotations

from typing import Any

from apps.core.audit.middleware import AuditMiddleware
from apps.core.audit.mixins import log_audit
from apps.core.audit.models import AuditLog


def audit_repository(
    *,
    actor,
    action: str,
    target_model: str,
    object_id,
    object_repr: str = "",
    changes: dict[str, Any] | None = None,
    request=None,
) -> None:
    ip = None
    ua = ""
    if request is not None:
        ip = AuditMiddleware._client_ip(request)
        ua = (request.META.get("HTTP_USER_AGENT") or "")[:512]
    log_audit(
        actor=actor,
        action=action,
        target_app="repository_documents",
        target_model=target_model[:64],
        object_id=str(object_id)[:64] if object_id is not None else "",
        object_repr=(object_repr or "")[:200],
        changes=changes,
        ip_address=ip,
        user_agent=ua,
    )


def action_create() -> str:
    return AuditLog.Action.CREATE


def action_update() -> str:
    return AuditLog.Action.UPDATE


def action_delete() -> str:
    return AuditLog.Action.DELETE


def action_access() -> str:
    return AuditLog.Action.ACCESS
