from django.shortcuts import render
from django.http import JsonResponse

import random
import re
from .models import *

# riporta la configurazione o solleva un'eccezione
def getConfigurazione(id=None,regex=False,rule=None):
  try:
    risultato = Configurazione.objects.get(pk=id)
  except Configurazione.DoesNotExist as dne:
    print('Configurazione: valore errato \'{}\'.'.format(id))
    return None

  '''
  di default viene passato valore a value, pronto per essere restituito.
  nel caso si presente regex, andiamo a valutare nell'ordine,
  la regola passata, se presente, oppure la regola inserita nel db.
  '''

  value = risultato.valore

  if regex:
    if rule:
      value = re.findall(rule,risultato.valore)
    else:
      value = re.findall(risultato.regex,risultato.valore)
  
  print('Configurazione: valore corretto \'{}\'.'.format(value))
  return value

def setConfigurazione(id=None,valore=None):
  try:
    configurazione = Configurazione.objects.get(pk=id)
  except Configurazione.DoesNotExist as dne:
    print('Configurazione, valore errato \'{}\'.'.format(id))
    configurazione = Configurazione()
    configurazione.id = id

  configurazione.valore = valore
  configurazione.save()
  print('Configurazione: valore aggiornato \'{}\': \'{}\''.format(id,valore))
  return configurazione.valore

#genera password
def getPassword():
  lunghezzapassword=int(getConfigurazione('mail_password_length'))
  print('lunghezza default password: ',lunghezzapassword)

  value ='abcdefghikjlmnopqrstuvwxyz'
  valueup=value.upper()
  number='0123456789'
  symbol='.,[!@#$%^&*?_~-:;()[]{}'

  #calcolo dei pesi (intendo dire, che ci sara' maggior spazio per le lettere, minore per i numeri, minimo per i simboli)
  vLo = int(lunghezzapassword * 0.40)
  vUp = int(lunghezzapassword * 0.40)
  nUm = int(lunghezzapassword * 0.20)
  sYm = lunghezzapassword -vLo -vUp -nUm

  print("pesi: ",vLo,vUp,nUm,sYm)
  # a questo punto estraggo tante liste (4) di voci random
  l=list()

  for i in range(0,vLo):
    l.append(random.choice(value))

  for i in range(0,vUp):
    l.append(random.choice(valueup))

  for i in range(0,nUm):
    l.append(random.choice(number))

  for i in range(0,sYm):
    l.append(random.choice(symbol))

  print("originale: ".join(l))
  random.shuffle(l)

  print("definitivo: ".join(l))
  return("".join(l)) 

# restituisce una nuova password via Json
def getJsonPassword(request):
  data = { 'newPassword': getPassword() }
  return JsonResponse(data)

