from django.shortcuts import render
from .models import *

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 django.conf import settings

from .models import *
from .forms import *

from config.views import *
from .managefile import *
from att.views import *

def welcome(request):
  '''
  punto di ingresso.
  vengono mostrati tutti i documenti presenti
  '''

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

  if not 'AziendaId' in request.session:
    print('manca azienda')
    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'])

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

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

  if request.method == 'POST':

    if 'ritorna' in request.POST:
      return HttpResponseRedirect(reverse("azienda:welcome"))

    if 'DeleteDocument' in request.POST:
      print('Richiesta cancellazione Documento',request.POST)
      documento = request.POST['DeleteDocument']  # perche' lo considera una lista e non un singolo valore?
      print('richiesta cancellazione documento:',documento)
      try:
        d = Documento.objects.get(pk=documento)
        delete_file(d)  #rimozione fisica del documento 
        d.delete()
      except Documento.DoesNotExist as dne:
        print('il documento non esiste')

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

    if filecaricati.is_valid():

      print('record filecaricati validi')
      if 'indice' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('indice'):
        fileindice = filecaricati.cleaned_data.get('indice')
        print('presente file indice',fileindice)
        save_and_load_file_indice(request,fileindice,azienda)

      if 'allegati' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('allegati'):
        print('presenti documenti da allegare')
        listadocumenti = filecaricati.cleaned_data['allegati']
        print(listadocumenti)
        print(type(azienda))
        print(azienda.id)
        listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,filecaricati.cleaned_data['descrizione'])
        data['listaok'] = listaok
        data['listanotok'] = listanotok

  ElencoDocumentiPerAzienda = Documento.objects.filter(azienda=azienda).order_by("utente__nome","documento")
  data['ElencoDocumentiPerAzienda'] = ElencoDocumentiPerAzienda
  print("Numero documenti associati",len(ElencoDocumentiPerAzienda))

  return render(request,'documento.welcome.html',data)

def finalize_download(request,did,uid=None):
  '''
  viene comunicato l'utente
  viene cercato il file memorizzato e viene riconsegnato 
  con il nome originale
  did: documento id
  uid: user id
  '''

  UserId = None

  if not did:
    return HttpResponseRedirect(reverse("login:start"))

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

  if 'UserId' in request.session:
    UserId = request.session['UserId']
    print('UserId in request session',UserId)
  else:
    print('UserId passed by func',uid)
    UserId = uid

  utente = Utente.objects.get(pk=UserId)
  documento = Documento.objects.get(pk=did)

  fl_completa = os.path.join(settings.BASE_DIR,getConfig('DocPath'),utente.azienda.partitaiva,utente.codicefiscale,documento.storage)
  print('path completa',fl_completa)

  if documento.storage and os.path.isfile(fl_completa):
    try:
      fl = open(fl_completa, 'rb')
    except Exception as er:
      print('errore',er)
      data=dict()
      data['errore']="File non esistente o non ancora disponibile"
      data['utente'] = utente
      data['documento'] = documento
      return render(request,'welcome.error.html',data)
  else:
    print('il file non esiste in document,download')
    data=dict()
    data['errore']='File non esistente o non ancora disponibile'
    data['utente'] = utente
    data['documento'] = documento
    return render(request,'welcome.error.html',data)

  mime_type, _ = mimetypes.guess_type(fl_completa)
  fl = fl_completa
  print('fl',fl,mime_type)
  response = FileResponse(open(fl,'rb'),content_type='application/pdf',as_attachment=False)
  #response['Content-Disposition'] = "attachment; filename=%s" % documento.documento
  setNewLog(3,{'utente':utente,'documento':documento,'azienda':utente.azienda})
  return response

