from django.db import models
from django.core.validators import MinLengthValidator

class Directores(models.Model):
    grado = models.CharField(max_length=100, verbose_name="Grado")
    nombres = models.CharField(max_length=200, validators=[MinLengthValidator(3)], verbose_name="Nombres y Apellidos")
    cargos = models.CharField(max_length=100, verbose_name="Cargos")

    def __str__(self):
        return f"{self.grado} {self.nombres}"

class Subjefes(models.Model):
    grado = models.CharField(max_length=100, verbose_name="Grado")
    nombres = models.CharField(max_length=200, validators=[MinLengthValidator(3)], verbose_name="Nombres y Apellidos")
    cargos = models.CharField(max_length=100, verbose_name="Cargos")
    director = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="subjefes", verbose_name="Director")

    def __str__(self):
        return f"{self.grado} {self.nombres}"

class Unidades(models.Model):
    nombre = models.CharField(max_length=200, unique=True, verbose_name="Nombre de Unidad")

    def __str__(self):
        return self.nombre
    
    
class InventarioAdministrativo(models.Model):
    placa_militar = models.CharField(max_length=50, unique=True, verbose_name="Placa Militar")
    clase = models.CharField(max_length=100, verbose_name="Clase")
    tipo = models.CharField(max_length=100, verbose_name="Tipo")
    marca = models.CharField(max_length=100, verbose_name="Marca")
    modelo = models.CharField(max_length=100, verbose_name="Modelo")
    color = models.CharField(max_length=100, verbose_name="Color")
    tipo_vehiculo = models.CharField(max_length=100, verbose_name="Tipo de Vehículo")
    placa_mtc = models.CharField(max_length=100, verbose_name="Placa MTC", blank=True, null=True)  # Opcional
    ano = models.IntegerField(verbose_name="Año", blank=True, null=True)  # Cambiado a IntegerField
    serial_carroceria = models.CharField(max_length=100, unique=True, verbose_name="Serial de Carrocería")
    fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
    asignado = models.BooleanField(default=False, verbose_name="Asignado")

    def __str__(self):
        return f"{self.placa_militar} - {self.marca} {self.modelo} ({self.clase})"

    class Meta:
        verbose_name = "Inventario Administrativo"
        verbose_name_plural = "Inventarios Administrativos"
        ordering = ['-fecha_creacion']
        indexes = [models.Index(fields=['placa_militar'])]

class InventarioTactico(models.Model):
    placa_militar = models.CharField(max_length=50, unique=True, verbose_name="Placa Militar")
    tipo = models.CharField(max_length=100, verbose_name="Tipo")
    modelo = models.CharField(max_length=100, verbose_name="Modelo")
    marca = models.CharField(max_length=100, verbose_name="Marca")
    clase = models.CharField(max_length=100, verbose_name="Clase")
    color = models.CharField(max_length=100, verbose_name="Color")
    tipo_vehiculo = models.CharField(max_length=100, verbose_name="Tipo de Vehículo")
    placa_mtc = models.CharField(max_length=100, verbose_name="Placa MTC", blank=True, null=True)  # Opcional
    ano = models.IntegerField(verbose_name="Año", blank=True, null=True)  # Cambiado a IntegerField
    serial_chasis = models.CharField(max_length=100, unique=True, verbose_name="Serial del Chasis")
    serial_motor = models.CharField(max_length=100, unique=True, verbose_name="Serial del Motor")
    fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
    asignado = models.BooleanField(default=False, verbose_name="Asignado")

    def __str__(self):
        return f"{self.tipo_vehiculo} - {self.marca} {self.modelo} (Chasis: {self.serial_chasis})"

    class Meta:
        verbose_name = "Inventario Táctico"
        verbose_name_plural = "Inventarios Tácticos"
        ordering = ['-fecha_creacion']
        indexes = [models.Index(fields=['placa_militar'])]
        
        
 
class AsignacionAdministrativa(models.Model):
    unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_admin", verbose_name="Unidad")
    directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_admin", verbose_name="Directores")
    jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_admin", verbose_name="Grupo de Trabajo")
    vehiculo = models.ForeignKey(InventarioAdministrativo, on_delete=models.CASCADE, related_name="asignaciones_temporales", verbose_name="Vehículo Administrativo")
    fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
    comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
    precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")

    def save(self, *args, **kwargs):
        self.vehiculo.asignado = True
        self.vehiculo.save()
        super().save(*args, **kwargs)

    def __str__(self):
        return f"Asignación de {self.vehiculo} a {self.unidad}"
    
    

class AsignadaUnidadAdministrativa(models.Model):
    unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_unidad_admin", verbose_name="Unidad")
    directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_unidad_admin", verbose_name="Directores")
    jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_unidad_admin", verbose_name="Grupo de Trabajo")
    vehiculo = models.ForeignKey(InventarioAdministrativo, on_delete=models.CASCADE, related_name="asignaciones_historial", verbose_name="Vehículo")
    fecha_creacion = models.DateField(verbose_name="Fecha de Creación")
    comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
    precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")

    def __str__(self):
        return f"Asignación histórica de {self.vehiculo} a {self.unidad}"
 
 
    
class AsignacionTactica(models.Model):
    unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_tacticas", verbose_name="Unidad")
    directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_tacticas", verbose_name="Directores")
    jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_tacticas", verbose_name="Grupo de Trabajo")
    vehiculo = models.ForeignKey(InventarioTactico, on_delete=models.CASCADE, related_name="asignaciones_temporales", verbose_name="Vehículo Tactico")
    fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
    comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
    precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")

    def save(self, *args, **kwargs):
        self.vehiculo.asignado = True
        self.vehiculo.save()
        super().save(*args, **kwargs)

    def __str__(self):
        return f"Asignación de {self.vehiculo} a {self.unidad}"

class AsignadaUnidadTactica(models.Model):
    unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_unidad_tacticas", verbose_name="Unidad")
    directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_unidad_tacticas", verbose_name="Directores")
    jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_unidad_tacticas", verbose_name="Grupo de Trabajo")
    vehiculo = models.ForeignKey(InventarioTactico, on_delete=models.CASCADE, related_name="asignaciones_historial", verbose_name="Vehículo")
    fecha_creacion = models.DateField(verbose_name="Fecha de Creación")
    comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
    precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")

    def __str__(self):
        return f"Asignación histórica de {self.vehiculo} a {self.unidad}"