from django.db import models
from reymotausers.models import ReyMotaUser
from django.utils import timezone

class Evento(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.TextField()
    fecha = models.DateField()
    hora = models.TimeField(default=timezone.now)  # Nuevo campo para la hora

    plazas_disponibles = models.PositiveIntegerField()
    publicado = models.BooleanField(default=False)  # Nuevo campo para la publicación
    url_imagen = models.TextField(blank=True, null=True)  # Campo para la URL de la imagen
    para_parejas = models.BooleanField(default=False)  # 🔹 nuevo campo para parejas
    lugar = models.ForeignKey('Lugar', on_delete=models.CASCADE, null=True, blank=True)
    # lugar = models.ForeignKey('Lugar', on_delete=models.CASCADE)
    precio = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

    def __str__(self):
        return self.nombre

    def plazas_restantes(self):
        return self.plazas_disponibles - self.reservas.count()


class Reserva(models.Model):
    evento = models.ForeignKey(
        Evento, related_name="reservas", on_delete=models.CASCADE)
    usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
    acompanante = models.ForeignKey(
        ReyMotaUser,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name='reservas_como_acompanante'
    )
    fecha_reserva = models.DateTimeField(auto_now_add=True)
    iniciador = models.BooleanField(default=True)  # 🔹 nuevo campo para parejas

    # añadir un campo para indicar quién inició la reserva. De este modo luego en detalle_evento mostraremos solo una vez a cada pareja.

    def __str__(self):
        if self.acompanante:
            return f"{self.usuario.nombre} (con {self.acompanante.nombre}) - {self.evento.nombre} - reserva realizada a las {self.fecha_reserva}"
        return f'{self.usuario.nombre} - {self.evento.nombre} - reserva realizada a las {self.fecha_reserva}'


class ListaEspera(models.Model):
    evento = models.ForeignKey(Evento, on_delete=models.CASCADE, related_name="lista_espera")
    usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
    acompanante = models.ForeignKey(
        ReyMotaUser,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name='lista_espera_como_acompanante'
    )
    fecha_apuntado = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Listas de espera"

    def __str__(self):
        return f'{self.usuario.nombre} en lista de espera para {self.evento.nombre}. Solicitada plaza el: {self.fecha_apuntado}'


class Noticia(models.Model):
    titulo = models.CharField(max_length=200)
    contenido = models.TextField()
    fecha_publicacion = models.DateTimeField(auto_now_add=True)
    autor = models.ForeignKey(ReyMotaUser, on_delete=models.SET_NULL, null=True)
    publicado = models.BooleanField(default=False)

    class Meta:
        ordering = ['-fecha_publicacion']  # Ordena por fecha de publicación, de la más reciente a la más antigua

    def __str__(self):
        return self.titulo


class Lugar(models.Model):
    nombre = models.CharField(max_length=200)
    url_ubicacion = models.URLField()
    notas = models.TextField(blank=True, null=True)

    class Meta:
        verbose_name_plural = "Lugares"

    def __str__(self):
        return self.nombre
