from django.db import models
from clientes.models import Persona, Comuna, Region

class Proyecto(models.Model):
    ESTADO_CHOICES = [
        ('planificacion', 'Planificación'),
        ('en_progreso', 'En Progreso'),
        ('completado', 'Completado'),
        ('pausado', 'Pausado'),
        ('cancelado', 'Cancelado'),
    ]
    nombre = models.CharField(max_length=255)
    clienteMandante = models.ForeignKey(Persona, on_delete=models.CASCADE, related_name='proyectos_mandante')
    fechaInicio = models.DateTimeField(null=True, blank=True)
    fechaFin = models.DateTimeField(null=True, blank=True)
    clienteFinal = models.ForeignKey(Persona, on_delete=models.CASCADE, related_name='proyectos_final')
    notas = models.TextField(blank=True, null=True)
    estado = models.CharField(max_length=20, choices=ESTADO_CHOICES, default='planificacion', blank=True, null=True)
    fechaCreacion = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.nombre


class ProyectoDireccion(models.Model):
    proyecto = models.ForeignKey(Proyecto, on_delete=models.CASCADE, related_name='direcciones')
    direccion = models.CharField(max_length=255)
    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"
    )
    contacto = models.CharField(max_length=255)
    cantidadEquipos = models.IntegerField(blank=True, null=True)
    observacion = models.CharField(max_length=255, blank=True, null=True)

    def __str__(self):
        return f"{self.direccion} - {self.proyecto.nombre}"




class UnidadDeMedida(models.Model):
    proyecto = models.ForeignKey(Proyecto, on_delete=models.CASCADE, related_name='unidades_de_medida')
    nombre = models.CharField(max_length=100)
    unidad = models.CharField(max_length=50)
    dias_habiles = models.BooleanField(default=True)

    def __str__(self):
        return f"{self.nombre} ({self.unidad})"



class HorarioActivo(models.Model):
    DIA_CHOICES = [
        ('lunes', 'Lunes'),
        ('martes', 'Martes'),
        ('miercoles', 'Miércoles'),
        ('jueves', 'Jueves'),
        ('viernes', 'Viernes'),
        ('sabado', 'Sábado'),
        ('domingo', 'Domingo'),
    ]
    proyecto = models.ForeignKey(Proyecto, on_delete=models.CASCADE, related_name='horarios_activos')
    dia = models.CharField(max_length=10, choices=DIA_CHOICES)
    activo = models.BooleanField(default=False)
    hora_inicio = models.TimeField(null=True, blank=True)
    hora_termino = models.TimeField(null=True, blank=True)

    class Meta:
        unique_together = ('proyecto', 'dia')  # Esto hace la combinación proyecto-día única

    def __str__(self):
        return f"{self.get_dia_display()} - {'Activo' if self.activo else 'Inactivo'}"



class SLA(models.Model):
    CATEGORIA_CHOICES = [
        ('Estándar', 'Estándar'),
        ('Premium', 'Premium'),
    ]

    proyecto = models.ForeignKey(Proyecto, on_delete=models.CASCADE, related_name='slas')
    zona = models.ForeignKey(Region, on_delete=models.CASCADE, related_name='slas')
    categoria = models.CharField(max_length=20, choices=CATEGORIA_CHOICES)
    
    unidad_medida = models.ForeignKey(UnidadDeMedida, on_delete=models.CASCADE, related_name='slas')
    cantidad = models.PositiveIntegerField()
    multa = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)

    def __str__(self):
        return f"SLA {self.categoria.capitalize()} - {self.proyecto.nombre} - {self.zona.nombre}"



class Equipo(models.Model):
    proyecto = models.ForeignKey(Proyecto, on_delete=models.CASCADE, related_name='equipos')
    ubicacion = models.ForeignKey(ProyectoDireccion, on_delete=models.CASCADE, related_name='equipos', null=True, blank=True)
    nombre = models.CharField(max_length=100)
    cantidad = models.PositiveIntegerField()
    marca = models.CharField(max_length=100)
    modelo = models.CharField(max_length=100)
    numero_serie = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return f"{self.nombre} - {self.marca} {self.modelo} ({self.numero_serie})"
    




