from django import  forms
from config.views import getConfig
from utente.models import Utente
from amministratore.models import Amministratore

class formUtente(forms.Form):
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['codicefiscale'] = forms.CharField(required=True)
    self.fields['nome'] = forms.CharField(required=True)
    self.fields['datanascita'] = forms.DateField(required=False) #,input_formats=['%d/%m/%Y',])
    self.fields['luogonascita'] = forms.CharField(required=False)
    self.fields['mail'] = forms.CharField(required=False)
    self.fields['cancellautente'] = forms.BooleanField(required=False)
    self.fields['pin'] = forms.CharField(required=True)
    self.fields['forzanuovapassword'] = forms.BooleanField(required=False)
    self.fields['cambiopassword'] = forms.BooleanField(required=False)
    self.fields['forzanuovapassword'] = forms.BooleanField(required=False)
    self.fields['otppassword'] = forms.BooleanField(required=False)
    self.fields['sede'] = forms.IntegerField(required=False)

class formPinMail(forms.Form):
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['mail'] = forms.CharField(required=False)
    self.fields['pin'] = forms.CharField(required=True)

class formUpdatePasswordPrimoLogin(forms.Form):
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['cfisc'] = forms.CharField(required=True)
    self.fields['uuid'] = forms.CharField(required=True)
    self.fields['pin0'] = forms.CharField(required=True)
    self.fields['pin1'] = forms.CharField(required=True)
    self.fields['pin2'] = forms.CharField(required=True)
    self.fields['lostpin'] = forms.CharField(required=False)

  def clean_pin1(self): 
    print(dir(self))
    # validazione password
    if self.data['pin1'] != self.data['pin2']:
      # password non corrispondente
      raise forms.ValidationError("Le due password devono essere uguali")
    if self.data['pin1'] == self.data['cfisc']:
      # nome uguale a login
      raise forms.ValidationError("La password non puo' essere uguale al login")
    if len(self.data['pin1']) < int(getConfig('PasswordMin')):
      # lunghezza minima della password
      raise forms.ValidationError("Password troppo corta")
    return self.data['pin1']

class formUpdatePasswordLogin(forms.Form):
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['cfisc'] = forms.CharField(required=True)
    self.fields['uuid'] = forms.CharField(required=True)
    self.fields['pin1'] = forms.CharField(required=True)
    self.fields['pin2'] = forms.CharField(required=True)

  def clean_pin1(self):
    print(dir(self))
    # validazione password
    if self.data['pin1'] != self.data['pin2']:
      # password non corrispondente
      raise forms.ValidationError("Le due password devono essere uguali")

    if self.data['pin1'] == self.data['cfisc']:
      # nome uguale a login
      raise forms.ValidationError("La password non puo' essere uguale al login")
  
    if len(self.data['pin1']) < int(getConfig('PasswordMin')):
      # lunghezza minima della password
      raise forms.ValidationError("Password troppo corta")

    return self.data['pin1']

  def clean_uuid(self):
      a = None
      d = None
      login = self.data['cfisc']
      # 1 tentativo su codice fiscale
      try: 
        a = Utente.objects.get(codicefiscale=login.upper())
        d = 'u'
      except Utente.DoesNotExist as dne:
        print('informazione non trovata tra i codici fiscali utente')
        try:
          a = Utente.objects.get(mail=login.lower())
          d = 'u'
        except Utente.DoesNotExist as dne:
          print('informazione non trovata tra le email')
          try:
            a = Amministratore.objects.get(login=login.lower())
            d = 'a'
          except Amministratore.DoesNotExist as dne:
            print('informazione non trovata tra i login amministratotore')

      if not a:
        raise forms.ValidationError("UUID Non Validato")
      else:
         if a.uuid == self.data['uuid']:
           return self.data['uuid']

      raise forms.ValidationError("UUID non valido o scaduto")

class formCancellaUtente(forms.Form):
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['ConfermaCancellazioneUtente'] = forms.BooleanField(required=False,initial=False)

class formIndiceUpload(forms.Form):
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['indice'] = forms.FileField(required=True,initial='')

class formMultipleCheckBox(forms.Form):
  choices = [(0,0),]
  def __init__(self,*args,**kwargs):
    forms.Form.__init__(self,*args,**kwargs)
    self.fields['select'] = forms.MultipleChoiceField(required=False,widget=forms.CheckboxSelectMultiple(),choices=self.choices)
  def c(self,lista):
    for u in lista:
      self.choices.append((u.id,u.id),)
    print('choices',self.choices) 

