from django.db import models

class Region(models.Model):
    codigo = models.CharField(max_length=20, primary_key=True)
    nombre = models.CharField(max_length=255)
    es_region = models.BooleanField(default=True)
    
    def __str__(self):
        return f"{self.codigo} - {self.nombre}"

class Comuna(models.Model):
    codigo = models.CharField(max_length=20, primary_key=True)
    nombre = models.CharField(max_length=255)
    region = models.ForeignKey(Region, on_delete=models.CASCADE, related_name='comunas', null=True, blank=True) 

    def __str__(self):
        return f"{self.codigo} - {self.nombre}"


class Feriado(models.Model):
    fecha = models.DateField(unique=True)
    nombre = models.CharField(max_length=100)

    class Meta:
        verbose_name = 'Feriado'
        verbose_name_plural = 'Feriados'
        ordering = ['fecha']

    def __str__(self):
        return f"{self.nombre} - {self.fecha.strftime('%d/%m/%Y')}"

class Persona(models.Model):
    rut = models.CharField(max_length=50, blank=True, null=True, unique=True)
    razonSocial = models.CharField(max_length=255, blank=True, null=True)
    nombreFantasia = models.CharField(max_length=255, blank=True, null=True)
    emailDte = models.EmailField(max_length=254, blank=True, null=True)
    email = models.EmailField(max_length=254, blank=True, null=True)
    telefono = models.CharField(max_length=50, blank=True, null=True)
    direccion = models.CharField(max_length=255, blank=True, null=True)
    region = models.ForeignKey(
        Region,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name="Región asociada"
    )
    comuna = models.ForeignKey(
        Comuna,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name="Comuna asociada"
    )
    activo = models.BooleanField(default=False)
    bloqueado = models.BooleanField(default=False)
    cliente = models.BooleanField(default=False)
    proveedor = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)

    def __str__(self):
        return self.razonSocial or self.rut or "Persona sin nombre"

class Contacto(models.Model):
    nombre = models.CharField(max_length=255)
    cargo = models.CharField(max_length=255, blank=True, null=True)
    telefono = models.CharField(max_length=50, blank=True, null=True)
    email = models.EmailField(max_length=254, blank=True, null=True)
    persona = models.ForeignKey(
        Persona,
        on_delete=models.CASCADE,
        related_name='contactos',
        verbose_name="Persona relacionada"
    )

    def __str__(self):
        return self.nombre