from django.conf import settings
from django.db import models


class AuthEventLog(models.Model):
    class EventType(models.TextChoices):
        LOGIN_SUCCESS = "LOGIN_SUCCESS", "Login Success"
        LOGIN_FAIL = "LOGIN_FAIL", "Login Failed"
        LOCKOUT = "LOCKOUT", "Account Lockout"
        MFA_FAIL = "MFA_FAIL", "MFA Failed"
        LOGIN_ATTEMPT_MCP = "LOGIN_ATTEMPT_MCP", "MCP Login Attempt"
        LOGIN_SUCCESS_MCP = "LOGIN_SUCCESS_MCP", "MCP Login Success"
        PASSWORD_CHANGE = "PASSWORD_CHANGE", "Password Changed"

    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="auth_events",
    )
    event_type = models.CharField(max_length=30, choices=EventType.choices)
    ip_address = models.CharField(max_length=45, null=True, blank=True)
    user_agent = models.TextField(null=True, blank=True)
    device_fingerprint = models.CharField(max_length=64, null=True, blank=True, db_index=True,
        help_text="Client-sent X-Device-Fingerprint, or a server-derived hash of UA+IP+lang.")
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "auth_event_logs"
        ordering = ["-created_at"]

    def __str__(self):
        return f"{self.event_type} user={self.user_id} at {self.created_at}"


class AuditLog(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="audit_logs",
    )
    action = models.CharField(max_length=50)
    description = models.TextField()
    ip_address = models.CharField(max_length=45, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "audit_logs"
        ordering = ["-created_at"]

    def __str__(self):
        return f"[{self.action}] user={self.user_id} at {self.created_at}"
