# proveedores/models.py
from django.db import models
from listas_configuracion.models import EmpaqueCompra
from referencias.models import Referencia

class Proveedor(models.Model):
    nombre_empresa = models.CharField(max_length=100, verbose_name="Proveedor")
    nit = models.CharField(max_length=20, unique=True, verbose_name="NIT")
    direccion = models.TextField(verbose_name="Dirección")
    telefono = models.CharField(max_length=20, verbose_name="Teléfono")
    email = models.EmailField(verbose_name="Email principal")
    contacto_compra = models.CharField(max_length=100, verbose_name="Contacto de compras")
    telefono_contacto = models.CharField(max_length=20, verbose_name="Teléfono contacto")
    email_contacto = models.EmailField(verbose_name="Email contacto")
    activo = models.BooleanField(default=True, verbose_name="Activo")
    
    class Meta:
        verbose_name = 'Proveedor'
        verbose_name_plural = 'Proveedores'
        ordering = ['nombre_empresa']
    
    def __str__(self):
        return f"{self.nombre_empresa} (NIT: {self.nit})"

class ProveedorReferencia(models.Model):
    proveedor = models.ForeignKey(
        Proveedor, 
        on_delete=models.CASCADE,
        related_name='referencias_proveedor'
    )
    referencia = models.ForeignKey(
        Referencia, 
        on_delete=models.CASCADE,
        related_name='proveedores_referencia'
    )
    lead_time_generar_orden = models.PositiveIntegerField(
        verbose_name="Lead time generar orden (días)"
    )
    lead_time_proveedor = models.PositiveIntegerField(
        verbose_name="Lead time proveedor (días)"
    )
    lead_time_total = models.PositiveIntegerField(
        verbose_name="Lead time total (días)",
        editable=False
    )
    minimo_unidades = models.PositiveIntegerField(
        verbose_name="Mínimo unidades por pedido"
    )
    empaque = models.ForeignKey(
        EmpaqueCompra,
        on_delete=models.PROTECT,
        verbose_name="Empaque de compra"
    )
    unidades_por_empaque = models.PositiveIntegerField(
        verbose_name="Unidades por empaque"
    )

    ESTADO_CERTIFICADO_CHOICES = [
        ('certificado', 'Certificado'),
        ('no_certificado', 'No certificado'),
    ]

    esta_certificado = models.CharField(
        max_length=20,
        choices=ESTADO_CERTIFICADO_CHOICES,
        default='no_certificado',
        verbose_name="¿Está certificado?"
    )

    
    class Meta:
        verbose_name = 'Relación Proveedor-Referencia'
        verbose_name_plural = 'Relaciones Proveedor-Referencia'
        unique_together = ('proveedor', 'referencia')
    
    def save(self, *args, **kwargs):
        self.lead_time_total = self.lead_time_generar_orden + self.lead_time_proveedor
        super().save(*args, **kwargs)
    
    def __str__(self):
        return f"{self.proveedor} → {self.referencia}"