from django.db import models
from django_tenants.models import TenantMixin
from django.utils import timezone
from django_tenants.models import DomainMixin
from django.conf import settings

from django.utils.text import slugify

class Client(TenantMixin):
    name = models.CharField(max_length=100, unique=True)  # Nome do cliente
    slug = models.SlugField(blank=True, null=True, unique=True)
    schema_name = models.CharField(max_length=63, unique=True)  # Nome do esquema
    paid_until = models.DateField(default=timezone.now)  # Data de pagamento
    on_trial = models.BooleanField(default=True)  # Se está no período de teste

    # Campos adicionais
    cnpj = models.CharField(max_length=18, blank=True, null=True)
    endereco = models.CharField(max_length=255, blank=True, null=True)
    telefone = models.CharField(max_length=15, blank=True, null=True)
    espaco_extra_mb = models.PositiveIntegerField(default=0)

    auto_create_schema = True  # Cria automaticamente o schema no PostgreSQL

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

    def limite_total_hd(self):
        """Retorna o limite total de HD (default + espaço extra)."""
        return getattr(settings, "HD_LIMIT_MB", 800) + self.espaco_extra_mb



class Domain(DomainMixin):
    tenant = models.ForeignKey(
        settings.TENANT_MODEL,  # Referencia o modelo de tenant configurado
        related_name="domains",
        on_delete=models.CASCADE,
    )
    domain = models.CharField(max_length=255, unique=True)  # Domínio único
    is_primary = models.BooleanField(default=True)  # Indica se é o domínio principal

    def __str__(self):
        return self.domain





class TenantDeleteRequest(models.Model):
    tenant = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='delete_requests')
    requested_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='delete_requests')
    approved_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name='approved_deletions')
    approved_at = models.DateTimeField(null=True, blank=True)
    requested_at = models.DateTimeField(auto_now_add=True)
    approved = models.BooleanField(default=False)
    status = models.CharField(max_length=20, default='pendente')  # Ex: pendente, aprovado, rejeitado

    def __str__(self):
        return f"Solicitação para deletar tenant '{self.tenant.name}' por {self.requested_by.username}"





class Informativo(models.Model):
    titulo = models.CharField(max_length=200)
    mensagem = models.TextField()
    data_programada = models.DateField()
    criado_em = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.titulo} ({self.data_programada})"
