from django.utils import timezone
from apps.audit.models import AuditLog


def _get_ip_from_request(request):
    if not request:
        return None
    xff = request.META.get('HTTP_X_FORWARDED_FOR')
    if xff:
        return xff.split(',')[0].strip()
    return request.META.get('REMOTE_ADDR')


def _get_ua_from_request(request):
    if not request:
        return None
    return request.META.get('HTTP_USER_AGENT')


def log_event(action, user=None, entity_type=None, entity_id=None, description=None, request=None, metadata=None):
    """Create an AuditLog record.

    This is append-only. Returns the created AuditLog object.
    """
    ip = _get_ip_from_request(request)
    ua = _get_ua_from_request(request)
    metadata = metadata or {}
    now = timezone.now()
    log = AuditLog.objects.create(
        user=user,
        action=action,
        entity_type=entity_type,
        entity_id=str(entity_id) if entity_id is not None else None,
        description=description or '',
        ip_address=ip,
        user_agent=ua,
        metadata=metadata,
        created_at=now,
    )
    return log
