from django.db import models
from amministratore.models import Amministratore

class Azienda(models.Model):
   '''
   questa classe definisce le società che gengono gestite dal programma.
   ogni utente può gestire una o più società.
   '''
   nome = models.CharField(max_length=132,null=False,default="")
   partitaiva = models.CharField(max_length=11,null=False,default="")
   mail = models.CharField(max_length=256,null=False,default="")
   comm=models.CharField(max_length=256,null=False,default="") # email usata come mittente per le comunicazioni
   cambiopassword = models.BooleanField(null=False,default=False)
   forzanuovapassword = models.BooleanField(null=False,default=False)
   otppassword = models.BooleanField(null=False,default=False)

   # cambiopassword = e' consentito il cambio password agli utenti
   # forzanuovapassword = obbligatorio il cambio password al primo login
   # otppassword = l'utente puo' accedere con otp

   def __str__(self):
       return f"{self.id}: {self.nome}"

   class Meta:
     constraints = [ models.UniqueConstraint(fields=['nome','partitaiva'], name="unique-azienda") ]
     indexes = [ models.Index(fields=['partitaiva','nome']) ]

class Sede(models.Model):
    '''
    'ogni azienda ha almeno una sede'.
    '''
    nome = models.CharField(max_length=132,null=False,default="")
    info = models.CharField(max_length=256,null=False,default="")
    identificativo = models.CharField(max_length=10,null=False,default="")
    azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
    cambiopassword = models.BooleanField(null=False,default=False)
    forzanuovapassword = models.BooleanField(null=False,default=False)
    otppassword = models.BooleanField(null=False,default=False)

    def __str__(self):
        return f"{self.id}: {self.nome}"

class AssegnazioneAzienda(models.Model):
  '''
  questa tabella permette le associazioni tra società e Utente
  semmai, il problema è capire come associare la società all'utente registrato nella security 
  '''
  azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT,null=True)
  amministratore = models.ForeignKey(Amministratore,on_delete=models.PROTECT,null=True)

  sola_lettura = models.BooleanField(default=False)
  crea_azienda = models.BooleanField(default=True)
  crea_sede = models.BooleanField(default=True)
  crea_utente = models.BooleanField(default=True)
  crea_documento = models.BooleanField(default=True)
  crea_comunicazione = models.BooleanField(default=True)
  edit_azienda = models.BooleanField(default=True)
  edit_sede = models.BooleanField(default=True)
  edit_utente = models.BooleanField(default=True)
  edit_documento = models.BooleanField(default=True)
  edit_comunicazione = models.BooleanField(default=True)
  crea_permesso = models.BooleanField(default=False)
  edit_permesso = models.BooleanField(default=False)
  read_permesso = models.BooleanField(default=True)

  def __str__(self):
    return f"{self.id}: {self.azienda} - {self.amministratore}"

class AssegnazioneSede(models.Model):
  sede = models.ForeignKey(Sede,on_delete=models.PROTECT,null=True)
  azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT,null=True)
  amministratore = models.ForeignKey(Amministratore,on_delete=models.PROTECT,null=True)

  sola_lettura = models.BooleanField(default=False)
  crea_azienda = models.BooleanField(default=True)
  crea_sede = models.BooleanField(default=True)
  crea_utente = models.BooleanField(default=True)
  crea_documento = models.BooleanField(default=True)
  crea_comunicazione = models.BooleanField(default=True)
  edit_azienda = models.BooleanField(default=True)
  edit_sede = models.BooleanField(default=True)
  edit_utente = models.BooleanField(default=True)
  edit_documento = models.BooleanField(default=True)
  edit_comunicazione = models.BooleanField(default=True)
  crea_permesso = models.BooleanField(default=False)
  edit_permesso = models.BooleanField(default=False)
  read_permesso = models.BooleanField(default=True)

  def __str__(self):
    return f"{self.id}: {self.sede} - {self.azienda} - {self.amministratore}"

