from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect,FileResponse
from django.contrib.auth.models import User
from django.urls import reverse

from .models import *
from .forms import *
from documento.forms import *

from documento.managefile import *
from att.views import *

from config.views import *
import re

def welcome(request):

  data = dict()
  data['HeaderTitle'] = getConfig('HeaderTitle')

  if not 'AziendaId' in request.session:
    return HttpResponseRedirect(reverse("login:start"))
  else:
    data['AziendaId'] = request.session['AziendaId']

  if not 'AdminId' in request.session or 'UserId' in request.session:
    print("Non rilevo presensa UserId e AdminId in request.session")
    return HttpResponseRedirect(reverse("login:start"))

  if 'AdminId' in request.session:
    data['AdminId'] = request.session['AdminId']
    
  if 'UserId' in request.session:
    data['UserId'] = request.session['UserId']

  #filtro:
  # selezionare tutti gli utenti per AziendaId
  #data['admin'] = User.objects.get(pk=data['AdminId']) che non so a che cazzo serve

  data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
  data['utenti'] = data['azienda'].utente_set.all().order_by('nome')

  if request.method == 'POST':
    print('qualcuno ha premuto un tasto')
    if "CaricamentiMultipli" in request.POST:
      print("Richiesto Caricamento Documenti")
      return HttpResponseRedirect(reverse("documento:welcome"))

    if 'ritorna' in request.POST:
      return HttpResponseRedirect(reverse("azienda:welcome"))
 
    if 'scelta' in request.POST:
      scelta = request.POST['scelta']
      request.session['UserEditId'] = scelta
      print('scelta effettuata',scelta)
      return HttpResponseRedirect(reverse("utente:edit"))

    filecaricati = AdminUpload(request.POST,request.FILES)

    if filecaricati.is_valid():
      print('record filecaricati validi')
      if filecaricati.cleaned_data.get('indice'):
        print('presente file indice')
        fileindice = filecaricati.cleaned_data.get('indice')
        print(fileindice)
        save_and_load_file_indice(fileindice,request,data['AziendaId'])
      if filecaricati.cleaned_data.get('allegati'):
        print('presenti documenti da allegare')
        listadocumenti = filecaricati.cleaned_data['allegati']
        print(listadocumenti)
        listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,data['utenti'],data['AziendaId'],filecaricati.cleaned_data['descrizione'],data['admin'])
        data['listaok'] = listaok
        data['listanotok'] = listanotok
  return render(request,'utente.welcome.html',data)

def edit(request):

  data=dict()

  if not 'AdminId' in request.session:
    return HttpResponseRedirect(reverse("login:start"))
  data['AdminId']=request.session['AdminId']

  if not 'AziendaId' in request.session:
    return HttpResponseRedirect(reverse("login:start"))

  data['AziendaId']=request.session['AziendaId']

  if not 'AdminId' in request.session or 'UserId' in request.session:
    print("Non rilevo presensa UserId e AdminId in request.session")
    return HttpResponseRedirect(reverse("login:start"))

  if 'AdminId' in request.session:
    data['AdminId'] = request.session['AdminId']
    
  if 'UserId' in request.session:
    data['UserId'] = request.session['UserId']

  if not'UserEditId' in request.session:
    return HttpResponseRedirect(reverse("login:start"))
  data['UserEditId'] = request.session['UserEditId']

  #filtro:
  # selezionare tutti gli utenti per AziendaId
  data['admin'] = User.objects.get(pk=data['AdminId'])

  data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])

  utente = None
  if data['UserEditId'] == "Nuovo Utente":
    utente = Utente()
    utente.azienda = data['azienda']
  else:
    try:
      utente = Utente.objects.get(pk=data['UserEditId'])
      data['documentiUtente'] = utente.documento_set.all()
      data['listaAttivita'] = getLogxAmministrazione(utente)
      data['uid']=utente.id
    except Utente.DoesNotExist as dne:
      print('strana richiesta, utente inesistente')
      flagDne=True
      utente=None
      print("Non ci siamo, manca l'utente")

  
  if request.method == 'POST':
    if "ritorna" in request.POST:
      return HttpResponseRedirect(reverse("utente:welcome"))    
    print('request.method x edit utente')

    if 'DeleteDocument' in request.POST:
      documento = request.POST['DeleteDocument']
      print('documento da rimuovere',documento)
      d = Documento.objects.get(pk=documento)
      if d:
       delete_file(d) #rimozione fisica del documento
       d.delete()

    fu = formUtente(request.POST)
    if fu.is_valid():
      print('form valida')
      print('i dati sono grosso modo coerenti, salviamoli')
      utente.nome = fu.cleaned_data['nome']
      utente.codicefiscale = fu.cleaned_data['codicefiscale']
      utente.luogonascita = fu.cleaned_data['luogonascita']
      utente.datanascita = fu.cleaned_data['datanascita']
      utente.mail = fu.cleaned_data['mail']
      utente.pin = fu.cleaned_data['pin']
      print('utente id',utente.id,utente.nome)
      setLog(7,utente=utente)
      utente.save()
    print('Form non valida')
    tmp = dict()
    tmp['nome'] = utente.nome
    tmp['codicefiscale'] = utente.codicefiscale
    tmp['datanascita'] = utente.datanascita
    tmp['luogonascita'] = utente.luogonascita
    tmp['mail'] = utente.mail
    tmp['pin'] = utente.pin
    print('tmp su form non valida',tmp)
    data['utente'] = formUtente(tmp)

    filecaricati = AdminUpload(request.POST,request.FILES)

    if filecaricati.is_valid():
      if filecaricati.cleaned_data.get('allegati'):
        print('presenti documenti da allegare')
        listadocumenti = filecaricati.cleaned_data['allegati']
        print(listadocumenti)
        print('descrizione',filecaricati.cleaned_data['descrizione'])
        save_and_load_file_single(listadocumenti,request,utente,data['azienda'],filecaricati.cleaned_data['descrizione'],data['admin'])
        data['documentiUtente'] = utente.documento_set.all()
  else:
    print('Request non valida,utente:',utente.id)
    tmp = dict()
    tmp['nome'] = utente.nome
    tmp['codicefiscale'] = utente.codicefiscale
    tmp['datanascita'] = utente.datanascita
    tmp['luogonascita'] = utente.luogonascita
    tmp['mail'] = utente.mail
    tmp['pin'] = utente.pin
    print("tmp su request non valida",tmp)
    data['utente'] = formUtente(tmp)

  # verifica bonta' mail.
  regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
  if(not re.fullmatch(regex, utente.mail)):
    print("Mail non valida")
    data['mailnonvalida']=True

  return render(request,'utente.edit.html',data)

def download(request):
  '''
  questa funzione permette di fare un po di cose:
  scaricare i documenti
  cambiare la password
  aggiornare la mail
  '''
  print('area download')

  data=dict()
  data['HeaderTitle'] = getConfig('HeaderTitle')

  if not 'UserId' in request.session:
    print("Non rilevo UserId in request.session")
    return HttpResponseRedirect(reverse("login:start"))

  data['UserId'] = request.session['UserId']

  #filtro:
  # avendo il dato utente... vediamo come muoverci
  #data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])

  #recuperiamo i dati dell'utente e i file che puo' scaricare.
  utente = None
  try:
    utente = Utente.objects.get(pk=data['UserId'])
  except Utente.DoesNotExist as dne:
    print('dillo che ci hai provato, fasullo!')
    return HttpResponseRedirect(reverse("login:start"))

  data['utente'] = utente
  data['documentiUtente'] = utente.documento_set.all()
  data['listaAttivita'] = getLogxUtente(utente)

  if request.method == 'POST':
    print('qualcosa è stato richiesto')
    if 'ritorna' in request.POST:
      return HttpResponseRedirect(reverse('login:start'))

    pinmail = formPinMail(request.POST)
    if pinmail.is_valid():
      print('pinmail valid')
      utente.pin = pinmail.cleaned_data['pin']
      utente.mail = pinmail.cleaned_data['mail']
      utente.save()
      print('utente aggiornato',utente.id)
      setLog(6,utente=utente)

  # verifica bonta' mail.
  regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
  if(not re.fullmatch(regex, utente.mail)):
    print("Mail non valida")
    data['mailnonvalida']=True
  else:
    print("Mail valida")
 
  return render(request,'utente.download.html',data)
