from django.db import models


class Gerencia(models.Model):
    nombre = models.CharField(max_length=200)

    class Meta:
        db_table = 'gerencia'
        verbose_name = "Gerencia"
        verbose_name_plural = "Gerencias"

    def __str__(self):
        return self.nombre


class Area(models.Model):
    gerencia = models.ForeignKey(
        Gerencia,
        on_delete=models.CASCADE,
        db_column='gerencia'
    )
    nombre = models.CharField(max_length=250)

    class Meta:
        db_table = 'area'
        verbose_name = "Área"
        verbose_name_plural = "Áreas"

    def __str__(self):
        return self.nombre


class LineaProduccion(models.Model):
    """Define las líneas de producción disponibles (por ejemplo: líquidos, sólidos, empaques, etc.)."""
    nombre = models.CharField(max_length=150, unique=True)
    codigo = models.CharField(max_length=20, unique=True)
    descripcion = models.TextField(blank=True, null=True)

    class Meta:
        db_table = 'lineas_produccion'
        verbose_name = "Línea de Producción"
        verbose_name_plural = "Líneas de Producción"

    def __str__(self):
        return self.nombre


class Usuario(models.Model):
    """Usuario local de planta o administrativo."""

    # Identificación
    cc = models.BigIntegerField(unique=True, verbose_name="Documento")
    nombre = models.CharField(max_length=250)
    correo = models.CharField(max_length=255, unique=True)
    tipo = models.SmallIntegerField(
        default=0,
        help_text="0=Operario, 1=Supervisor, 2=Administrativo, 3=Otro"
    )
    cargo = models.CharField(max_length=150, blank=True, null=True)

    # Relaciones jerárquicas
    area = models.ForeignKey(
        Area,
        on_delete=models.SET_NULL,
        db_column='area',
        null=True,
        blank=True,
        related_name='usuarios'
    )
    linea_produccion = models.ForeignKey(
        LineaProduccion,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,  # ← no obligatorio
        related_name='usuarios'
    )

    # Credenciales y estado
    contrasena = models.CharField(max_length=255)
    estado = models.SmallIntegerField(default=1, help_text="1=Activo, 0=Inactivo")
    token = models.CharField(max_length=255, null=True, blank=True)
    img = models.CharField(max_length=250, null=True, blank=True, default='default.png')

    # Ubicación y otros
    pais = models.CharField(max_length=250, default='Colombia')
    ciudad = models.CharField(max_length=250, null=True, blank=True)

    # Auditoría
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    fecha_actualizacion = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'usuarios'
        verbose_name = "Usuario"
        verbose_name_plural = "Usuarios"
        indexes = [
            models.Index(fields=['area'], name='usuarios_area_idx'),
            models.Index(fields=['linea_produccion'], name='usuarios_linea_idx'),
        ]

    def __str__(self):
        return f"{self.nombre} ({self.correo})"
