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


class Produto(models.Model):
    nome = models.CharField("Nome do produto", max_length=100)
    categoria = models.CharField("Categoria", max_length=100, default="Geral")
    descricao = models.TextField("Descrição", blank=True)
    preco = models.DecimalField("Preço", max_digits=7, decimal_places=2)
    imagem = models.ImageField("Foto do produto", upload_to='produtos/', blank=True, null=True)
    disponivel = models.BooleanField("Disponível para venda", default=True)
    criado_em = models.DateTimeField("Criado em", default=timezone.now)  # ✅ apenas default!

    class Meta:
        ordering = ['categoria', 'nome']
        verbose_name = "Produto"
        verbose_name_plural = "Produtos"

    def __str__(self):
        return f"{self.nome} - R$ {self.preco:.2f}"

    def to_ia_dict(self):
        return {
            "nome": self.nome,
            "categoria": self.categoria,
            "descricao": self.descricao,
            "preco": float(self.preco),
            "disponivel": self.disponivel
        }


from django.db import models
from django.utils import timezone
import uuid

class Pedido(models.Model):
    codigo = models.CharField("Código de acompanhamento", max_length=20, unique=True, null=True, blank=True)

    nome = models.CharField("Nome do cliente", max_length=100, default="Cliente")
    telefone = models.CharField("WhatsApp", max_length=20, default="(00) 00000-0000")
    endereco = models.TextField("Endereço de entrega", default="Endereço não informado")

    data = models.DateTimeField("Data do pedido", default=timezone.now)
    itens = models.TextField("Itens do pedido", help_text="Lista dos produtos, separado por vírgula")
    total = models.DecimalField("Total (R$)", max_digits=8, decimal_places=2)
    observacoes = models.TextField("Observações do cliente", max_length=1000, blank=True, help_text="Ex: sem ovo, tudo separado, sem maionese, etc.")

    pagamento = models.CharField("Forma de pagamento", max_length=50, choices=[
        ('pix', 'Pix'),
        ('cartao', 'Cartão'),
        ('dinheiro', 'Dinheiro')
    ])

    status = models.CharField("Status", max_length=50, choices=[
        ('confirmado', 'Confirmado'),         # Cliente fez o pedido
        ('preparo', 'Em preparo'),            # Dono iniciou o preparo
        ('entrega', 'Saiu para entrega'),     # Saiu para entrega
        ('entregue', 'Entregue')              # Finalizado
    ], default='confirmado')

    class Meta:
        ordering = ['-data']
        verbose_name = "Pedido"
        verbose_name_plural = "Pedidos"

    def save(self, *args, **kwargs):
        if not self.codigo:
            self.codigo = f"PED{uuid.uuid4().hex[:6].upper()}"
        super().save(*args, **kwargs)

    def __str__(self):
        return f"Pedido #{self.codigo or self.id}"






class Mensagem(models.Model):
    cliente = models.CharField("Nome do cliente", max_length=100)
    numero_whatsapp = models.CharField("WhatsApp", max_length=20, blank=True)
    conteudo = models.TextField("Mensagem recebida")
    resposta = models.TextField("Resposta enviada", blank=True)
    data = models.DateTimeField("Data da mensagem", default=timezone.now)  # ✅ corrigido
    respondido = models.BooleanField("Respondido?", default=False)
    origem = models.CharField("Origem", max_length=20, choices=[
        ('whatsapp', 'WhatsApp'),
        ('site', 'Site'),
        ('outro', 'Outro')
    ], default='whatsapp')

    class Meta:
        ordering = ['-data']
        verbose_name = "Mensagem"
        verbose_name_plural = "Mensagens"

    def __str__(self):
        return f"{self.cliente} ({'Respondido' if self.respondido else 'Pendente'})"


from django.utils.text import slugify

class IdentidadeRestaurante(models.Model):
    nome = models.CharField(max_length=100)
    slug = models.SlugField(blank=True, null=True, unique=True)
    logotipo = models.ImageField(upload_to='logotipos/', blank=True, null=True)
    endereco = models.CharField(max_length=255, blank=True)
    telefone = models.CharField(max_length=20, blank=True)

    def save(self, *args, **kwargs):
        if not self.slug and self.nome:
            base_slug = slugify(self.nome)
            slug = base_slug
            num = 1
            while IdentidadeRestaurante.objects.filter(slug=slug).exclude(id=self.id).exists():
                slug = f"{base_slug}-{num}"
                num += 1
            self.slug = slug
        super().save(*args, **kwargs)

    def __str__(self):
        return self.nome


from django.conf import settings  # <- Importa o modelo de usuário configurado

class ProprietarioEstabelecimento(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    identidade = models.CharField(max_length=50)
    telefone = models.CharField(max_length=20)
    endereco = models.TextField()
    avatar = models.CharField(max_length=100, blank=True, null=True)  # nome do arquivo do avatar


    def __str__(self):
        return self.user.get_full_name() or self.user.username
