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


class ExpedienteLog(models.Model):
    ACCION_VISTO = "visto"
    ACCION_PDF_GENERADO = "pdf_generado"
    ACCION_ZIP_DESCARGADO = "zip_descargado"
    ACCION_ENVIADO_ERP = "enviado_erp"
    ACCION_REABIERTO = "reabierto"
    ACCION_DISPUTA_REGISTRADA = "disputa_registrada"
    ACCION_DISPUTA_ACTUALIZADA = "disputa_actualizada"

    ACCION_CHOICES = [
        (ACCION_VISTO, "Visto"),
        (ACCION_PDF_GENERADO, "PDF generado"),
        (ACCION_ZIP_DESCARGADO, "ZIP descargado"),
        (ACCION_ENVIADO_ERP, "Enviado a ERP"),
        (ACCION_REABIERTO, "Reabierto"),
        (ACCION_DISPUTA_REGISTRADA, "Disputa registrada"),
        (ACCION_DISPUTA_ACTUALIZADA, "Disputa actualizada"),
    ]

    boleta = models.ForeignKey(
        "boletas.Boleta",
        on_delete=models.CASCADE,
        related_name="expediente_logs",
    )
    usuario = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
    )
    accion = models.CharField(max_length=30, choices=ACCION_CHOICES)
    detalle = models.JSONField(default=dict, blank=True)
    fecha = models.DateTimeField(auto_now_add=True)

    class Meta:
        permissions = [
            ("view", "Puede consultar expediente"),
            ("enviar_erp", "Puede enviar expediente a ERP"),
            ("reabrir_boleta", "Puede reabrir boleta desde expediente"),
            ("resolver_disputa", "Puede resolver disputas"),
        ]


class Disputa(models.Model):
    ESTADO_ABIERTA = "abierta"
    ESTADO_EN_REVISION = "en_revision"
    ESTADO_RESUELTA = "resuelta"
    ESTADO_RECHAZADA = "rechazada"

    ESTADO_CHOICES = [
        (ESTADO_ABIERTA, "Abierta"),
        (ESTADO_EN_REVISION, "En revisión"),
        (ESTADO_RESUELTA, "Resuelta"),
        (ESTADO_RECHAZADA, "Rechazada"),
    ]

    boleta = models.ForeignKey(
        "boletas.Boleta",
        on_delete=models.CASCADE,
        related_name="disputas",
    )
    creada_por = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True,
        related_name="+",
    )

    motivo = models.TextField()
    estado = models.CharField(max_length=20, choices=ESTADO_CHOICES, default=ESTADO_ABIERTA)

    resolucion = models.TextField(blank=True)
    resuelta_por = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="+",
    )
    fecha_cierre = models.DateTimeField(null=True, blank=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ["-id"]
