# actas/models.py
from django.db import models
from django.utils import timezone
from datetime import date
# Importamos modelos de las otras apps
from usuarios.models import Usuario as UserSystem, Empleado # Usuario del sistema y Empleado/Receptor
from inventario.models import Equipo # El activo principal

# --- 1. Tabla Principal: Acta de Entrega/Retiro ----------------------------

class Acta(models.Model):
    """Corresponde a la tabla `actas` (Documento de transacción)."""

    ESTADO_ACTA_CHOICES = [
        ('Activo', 'Activo'),
        ('Inactivo', 'Inactivo'),
        ('Completado', 'Completado'),
        ('Pendiente', 'Pendiente'),
    ]
    TIPO_ACTA_CHOICES = [
        ('Entrega', 'Entrega'),
        ('Retiro', 'Retiro'),
        ('Transferencia', 'Transferencia'),
    ]

    # Relaciones con otras Apps
    id_equipo = models.ForeignKey(Equipo, on_delete=models.SET_NULL, null=True, blank=True)
    
    # docNumber del receptor (Empleado, quien recibe el equipo)
    docNumber = models.ForeignKey(Empleado, to_field='docNumber', on_delete=models.SET_NULL, null=True, blank=True, db_column='docNumber')
    
    # id_useradmin (El usuario del sistema que realiza el acta)
    id_useradmin = models.ForeignKey(UserSystem, on_delete=models.SET_NULL, null=True, blank=True)

    # Campos de Documento
    consecutivo = models.IntegerField(null=True, blank=True)
    nombre = models.CharField(max_length=150, null=True, blank=True)
    fecha = models.DateTimeField(default=timezone.now) 
    ruta_pdf = models.CharField(max_length=255, null=True, blank=True)
    estado = models.CharField(max_length=50, choices=ESTADO_ACTA_CHOICES, default='Activo')
    observaciones = models.TextField(null=True, blank=True)
    tipo_acta = models.CharField(max_length=50, choices=TIPO_ACTA_CHOICES, null=True, blank=True)
    ciudad = models.CharField(max_length=100, null=True, blank=True)
    solicitud = models.CharField(max_length=255, null=True, blank=True)

    # Firmas
    firmaEntrega = models.CharField(max_length=255, null=True, blank=True)
    firmaReceptor = models.CharField(max_length=255, null=True, blank=True)

    class Meta:
        db_table = 'actas'
        verbose_name = "Acta de Entrega/Retiro"
        verbose_name_plural = "Actas"
        
    def __str__(self):
        return f"Acta {self.tipo_acta} #{self.consecutivo}"


# --- 2. Tabla de Relación: Asignación de Periféricos (Receptor-Equipo) ------

class AsignacionPeriferico(models.Model):
    """
    Corresponde a la tabla `asignaciones_perifericos`.
    Registra qué periférico está asignado a qué empleado.
    """
    
    # FK a Equipo (por numero_activo)
    numero_activo = models.ForeignKey(
        Equipo,
        to_field='numero_activo', 
        on_delete=models.CASCADE,
        db_column='numero_activo'
    )
    
    # FK a Empleado (por docNumber)
    docNumber = models.ForeignKey(
        Empleado,
        to_field='docNumber',
        on_delete=models.CASCADE,
        db_column='docNumber'
    )
    
    estado = models.BooleanField(default=True)
    fecha_entrega = models.DateField(default=date.today)
    fecha_devolucion = models.DateField(null=True, blank=True)
    observaciones = models.TextField(null=True, blank=True)

    class Meta:
        db_table = 'asignaciones_perifericos'
        verbose_name = "Asignación de Periférico"
        verbose_name_plural = "Asignaciones de Periféricos"


# --- 3. Tabla de Soporte: Evidencias ---------------------------------------

class Evidencia(models.Model):
    """Corresponde a la tabla `evidencias`."""
    
    TIPO_EVIDENCIA_CHOICES = [
        ('Entrega', 'Entrega'),
        ('Retiro', 'Retiro'),
        ('Novedad', 'Novedad'),
    ]
    
    # Clave Foránea a Equipo (ON DELETE CASCADE)
    id_equipo = models.ForeignKey(Equipo, on_delete=models.CASCADE) 
    
    ruta_img = models.CharField(max_length=255)
    descripcion = models.TextField(null=True, blank=True)
    tipo_evidencia = models.CharField(max_length=50, choices=TIPO_EVIDENCIA_CHOICES, null=True, blank=True)
    fecha_registro = models.DateField(default=date.today)
    estado = models.BooleanField(default=True) # tinyint(1)

    class Meta:
        db_table = 'evidencias'
        verbose_name_plural = "Evidencias"

    def __str__(self):
        return f"Evidencia de {self.get_tipo_evidencia_display()} para {self.id_equipo.cod_activo}"