from django.db import models
from apps.clientes.models import ClientesModels, EmpresasModels
from apps.saidas.models import Saidas
from apps.lotes.models import Semeadura
from django.contrib.auth.models import User
from django.utils import timezone

class Protocolo(models.Model):
    TIPOS_CLIENTE = (
        ('F', 'Cliente Físico'),
        ('E', 'Empresa'),
    )
    TIPOS_PAGAMENTO = (
        ('A', 'À vista'),
        ('P', 'Parcelado'),
    )
    
    tipo_cliente = models.CharField(max_length=1, choices=TIPOS_CLIENTE)
    cliente_fisico = models.ForeignKey(ClientesModels, on_delete=models.CASCADE, null=True, blank=True)
    cliente_empresa = models.ForeignKey(EmpresasModels, on_delete=models.CASCADE, null=True, blank=True)
    saidas = models.ManyToManyField(Saidas, blank=True)
    
    # O campo semeadura permanece como ForeignKey mas será gerenciado pelo modelo intermediário
    semeadura = models.ForeignKey(Semeadura, on_delete=models.CASCADE, null=True, blank=True)
    
    num_protocolo = models.CharField(max_length=500, verbose_name="Número do Protocolo", null=True, blank=True)
    referente_nf = models.CharField(max_length=20, verbose_name="Referente à NF", null=True, blank=True)
    tipo_pagamento = models.CharField(max_length=1, choices=TIPOS_PAGAMENTO, verbose_name="Tipo de Pagamento", null=True, blank=True)
    num_pedido = models.CharField(max_length=20, verbose_name="Número do Pedido", null=True, blank=True)
    destino_muda = models.CharField(max_length=100, verbose_name="Destino das Mudas", null=True, blank=True)
    placa_veiculo = models.CharField(max_length=10, verbose_name="Placa do Veículo", null=True, blank=True)
    resp_recebimento = models.CharField(max_length=100, verbose_name="Responsável pelo Recebimento", null=True, blank=True)
    inscricao_estadual = models.CharField(max_length=20, verbose_name="Inscrição Estadual", null=True, blank=True)
    data_criacao = models.DateField(auto_now_add=True, verbose_name="Data de Criação")
    data_saida_protocolo = models.DateField(verbose_name="Data de Saída do Protocolo", null=True, blank=True, default=timezone.now)
    produtor = models.CharField(max_length=100, verbose_name="Produtor", null=True, blank=True)
    renasem_produtor = models.CharField(max_length=20, verbose_name="RENASEM do Produtor", null=True, blank=True)
    resp_tecnico = models.CharField(max_length=100, verbose_name="Responsável Técnico", null=True, blank=True)
    renasem_tecnico = models.CharField(max_length=20, verbose_name="RENASEM do Técnico", null=True, blank=True)
    finalizado = models.BooleanField(default=False)
    observacao = models.TextField(verbose_name="Observação", null=True, blank=True)  # Novo campo**

    def __str__(self):
        return f"{self.get_tipo_cliente_display()} - {self.num_protocolo}"

class ProtocoloSemeadura(models.Model):
    protocolo = models.ForeignKey(Protocolo, on_delete=models.CASCADE)
    semeadura = models.ForeignKey(Semeadura, on_delete=models.CASCADE)
    categoria = models.CharField(max_length=100, verbose_name="Categoria", null=True, blank=True)
    qtd_especie = models.IntegerField(verbose_name="Quantidade de Espécie", null=True, blank=True)
    valor_unit = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Valor Unitário", null=True, blank=True)
    valor_total = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Valor Total", null=True, blank=True)
    data_venda = models.DateField(verbose_name="Data da Venda", null=True, blank=True)
    total_qtd_especie = models.IntegerField(verbose_name="Total Quantidade de Espécie", null=True, blank=True)
    
    class Meta:
        unique_together = ('protocolo', 'semeadura')

class ProtocoloFinalizado(models.Model):
    protocolo_id = models.IntegerField()
    tipo_cliente = models.CharField(max_length=1)
    cliente_fisico = models.ForeignKey(ClientesModels, on_delete=models.SET_NULL, null=True, blank=True)
    cliente_empresa = models.ForeignKey(EmpresasModels, on_delete=models.SET_NULL, null=True, blank=True)
    num_protocolo = models.CharField(max_length=500)
    referente_nf = models.CharField(max_length=50, null=True, blank=True)
    tipo_pagamento = models.CharField(max_length=50, null=True, blank=True)
    num_pedido = models.CharField(max_length=50, null=True, blank=True)
    destino_muda = models.CharField(max_length=50, null=True, blank=True)
    placa_veiculo = models.CharField(max_length=50, null=True, blank=True)
    resp_recebimento = models.CharField(max_length=50, null=True, blank=True)
    inscricao_estadual = models.CharField(max_length=50, null=True, blank=True)
    produtor = models.CharField(max_length=50, null=True, blank=True)
    renasem_produtor = models.CharField(max_length=50, null=True, blank=True)
    resp_tecnico = models.CharField(max_length=50, null=True, blank=True)
    renasem_tecnico = models.CharField(max_length=50, null=True, blank=True)
    data_criacao = models.DateTimeField()
    data_finalizacao = models.DateTimeField()
    usuario_finalizacao = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
    finalizado = models.BooleanField(default=False)


class ProtocoloSemeaduraFinalizado(models.Model):
    protocolo_finalizado = models.ForeignKey(ProtocoloFinalizado, on_delete=models.CASCADE, related_name='semeaduras_finalizadas')
    semeadura = models.ForeignKey(Semeadura, on_delete=models.CASCADE)
    categoria = models.CharField(max_length=50)
    qtd_especie = models.DecimalField(max_digits=10, decimal_places=3)
    valor_unit = models.DecimalField(max_digits=10, decimal_places=2)
    valor_total = models.DecimalField(max_digits=10, decimal_places=2)
    data_venda = models.DateField(null=True, blank=True)
    finalizado = models.BooleanField(default=False)