# reunioes/models.py
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
import uuid
from datetime import timedelta

def gerar_codigo():
    # Gera um código único de 10 caracteres (8 dígitos em hexadecimal)
    return uuid.uuid4().hex[:10].upper()

class Reuniao(models.Model):
    host = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='reunioes_criadas',
        verbose_name='Organizador'
    )
    titulo = models.CharField(
        max_length=200,
        verbose_name='Título da Reunião'
    )
    codigo = models.CharField(
        max_length=10,
        unique=True,
        default=gerar_codigo,
        verbose_name='Código de Acesso'
    )
    data_hora = models.DateTimeField(
        default=timezone.now,
        verbose_name='Data/Hora de Início'
    )
    duracao_minutos = models.PositiveIntegerField(
        default=45,
        verbose_name='Duração (minutos)'
    )

    class Meta:
        verbose_name = 'Reunião'
        verbose_name_plural = 'Reuniões'
        ordering = ['-data_hora']

    def __str__(self):
        return f"{self.titulo} ({self.codigo}) - {self.host.username}"

    @property
    def data_fim(self):
        return self.data_hora + timedelta(minutes=self.duracao_minutos)

    @property
    def ativa(self):
        return timezone.now() < self.data_fim

class SolicitacaoEntrada(models.Model):
    reuniao = models.ForeignKey(
        Reuniao,
        on_delete=models.CASCADE,
        related_name='solicitacoes',
        verbose_name='Reunião'
    )
    nome = models.CharField(
        max_length=100,
        verbose_name='Nome do Convidado'
    )
    data_solicitacao = models.DateTimeField(
        auto_now_add=True,
        verbose_name='Data da Solicitação'
    )
    autorizado = models.BooleanField(
        default=False,
        verbose_name='Autorizado?'
    )

    class Meta:
        verbose_name = 'Solicitação de Entrada'
        verbose_name_plural = 'Solicitações de Entrada'
        ordering = ['-data_solicitacao']
        unique_together = ('reuniao', 'nome')  # Impede solicitações duplicadas

    def __str__(self):
        status = "Autorizado" if self.autorizado else "Pendente"
        return f"{self.nome} - {self.reuniao.codigo} ({status})"
