from django.db import models
from django.db.models.functions import Length
from django.db.models.constraints import CheckConstraint,Q
from  datetime import date
import django.utils
# Create your models here.

models.CharField.register_lookup(Length)

class Libreria(models.Model):
    id=models.AutoField(primary_key=True)
    denominazione = models.CharField(max_length=60, blank=False, null=False)    
    contatto = models.CharField(max_length=30, blank=True, null=True)    
    telefono = models.CharField(max_length=25, blank=True, null=True)  
    email = models.EmailField( blank=True, null=True)      
    username= models.CharField(max_length=11, blank=False, null=False)          
    password= models.CharField(max_length=12, blank=False, null=False)            

    class Meta:
#        constraints = [
#            models.CheckConstraint(check=models.Q(username__length__gte=8), name="libreria_username_minlength")
#        ]        

        db_table = 'libreria'      

    def __str__(self):
            return "%ss" % (self.denominazione)          

class Prenotazione(models.Model):
    id=models.AutoField(primary_key=True)
    pr_annoscol=models.SmallIntegerField(blank=False, null=False, default=2022)
    pr_data_richiesta = models.DateField(blank=False, null=False, default=django.utils.timezone.now() )
    pr_codfiscale  = models.CharField(max_length=16, blank=False, null=False)
    pr_scuola = models.ForeignKey('Scuola', on_delete=models.CASCADE, blank=False, null=False)    
    pr_classe=models.SmallIntegerField(blank=True, null=True)
    pr_facoltativo=models.BooleanField(blank=False, null=False, default=False)
    pr_libreria = models.ForeignKey('Libreria', on_delete=models.CASCADE, blank=False, null=False)   
    pr_consegnato=models.BooleanField(blank=False, null=False, default=False) 
    pr_spesa=models.DecimalField(max_digits=8, decimal_places=2, blank=False, null=False, default=0)    
    pr_stato=models.SmallIntegerField(blank=False, null=False, default=0) # 0-selezionabile, 1-da fatturare, 2-fatturata
    pr_fatturanum=models.DecimalField(blank=True, null=True, max_digits=8, decimal_places=2) 

    CheckConstraint(check= Q(pr_fatturanum__isnull=False) & Q(pr_stato=2), name="check_fattura_stato")
    class Meta:
        #managed = False
        db_table = 'prenotazione'
#tabella con la lista delle fature inserite
class Fattura(models.Model):
    id=models.AutoField(primary_key=True)
    fa_data = models.DateField(blank=False, null=False, default=django.utils.timezone.now() )
    fa_annoscol=models.SmallIntegerField(blank=False, null=False, default=2024)
    fa_classe=models.SmallIntegerField(blank=True, null=True)
    fa_libreria = models.ForeignKey('Libreria', on_delete=models.CASCADE, blank=False, null=False)   
    fa_importo = models.DecimalField(max_digits=8, decimal_places=2, blank=False, null=False, default=0)  
    fa_note  = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        #managed = False
        db_table = 'fattura'


#tabella con la lista delle scuole selezionabili
class Scuola(models.Model):
    id = models.AutoField(primary_key=True)    
    nome = models.CharField(max_length=100, blank=False, null=False)      
  
   
    class Meta:
        #managed = False
        db_table = 'scuola'        
        
    def __str__(self):
            return "%s" % (self.nome)
    

    
