import uuid
from django.db import models
from django.conf import settings
from apps.core.models import BaseModel


class AuditLog(BaseModel):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL, related_name='audit_logs')
    action = models.CharField(max_length=150, db_index=True)
    entity_type = models.CharField(max_length=150, null=True, blank=True, db_index=True)
    entity_id = models.CharField(max_length=255, null=True, blank=True, db_index=True)
    description = models.TextField(blank=True)
    ip_address = models.CharField(max_length=100, blank=True, null=True)
    user_agent = models.CharField(max_length=512, blank=True, null=True)
    metadata = models.JSONField(default=dict, blank=True, null=True)

    class Meta:
        indexes = [
            models.Index(fields=['action']),
            models.Index(fields=['user']),
            models.Index(fields=['created_at']),
        ]

    tenant_id = models.CharField(max_length=100, null=True, blank=True, db_index=True)

    def __str__(self):
        return f"{self.created_at.isoformat()} {self.action} ({self.entity_type}:{self.entity_id})"
