from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import *
from config.views import *
from att.views import *
from .forms import *
from sicurezza.views import getAMP,getAZP,getSEP

def welcome(request):

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

  AdminId = request.session['AdminId']
  print('AdminId',AdminId)

  data = dict()
 
  azienda = None
  if 'AziendaId' in request.session:
    AziendaId = request.session['AziendaId']
    print('AziendaId',AziendaId)
    azienda = Azienda.objects.get(pk=AziendaId)
    data['azienda'] = azienda

  sede = None

  if 'SedeId' in request.session:
    SedeId = request.session['SedeId']
    print('SedeId',SedeId)
    try:
      sede = Sede.objects.get(pk=SedeId)
    except Sede.DoesNotExist as dne:
      print("non esiste")

    data['sede'] = sede

  data['HeaderTitle'] = getConfig('HeaderTitle')
  data['Navbar']=True

  admin = Amministratore.objects.get(pk=AdminId)
  data['admin'] = admin
  data['permesso_amministratore'] = getAMP(admin)
  data['permesso_azienda'] = getAZP(azienda,admin)
  data['permesso_sede'] = getSEP(sede,admin)

  print('permesso_amministratore',data['permesso_amministratore'])
  print('permesso_azienda',data['permesso_azienda'])
  print('permesso_sede',data['permesso_sede'])
  print('admin',admin.id,admin.nome)

  assegnazioneazienda = AssegnazioneAzienda.objects.filter(amministratore=admin.id).order_by('azienda__nome')
  print('assegnazioneazienda',len(assegnazioneazienda))

  assegnazionesede=None
  if azienda:
    assegnazionesede = AssegnazioneSede.objects.filter(amministratore=admin,azienda=azienda).order_by('sede__nome')

  data['listaAttivitaxAmministrazione']=getLogxAmministrazione(admin)

  if request.method=="POST":
    print(request.POST)
    if 'indietro' in request.POST:
      print('premuto tast indietro,logout')
      return HttpResponseRedirect(reverse("login:start"))

    if "sceltaazienda" in request.POST:
      sceltaazienda = request.POST.get('sceltaazienda')
      try:
        sceltaazienda = int(sceltaazienda)
      except ValueError as ve:
        print("Non e' stata fatta la scelta corretta",ve)
        return HttpResponseRedirect(reverse('azienda:welcome'))

      print("sceltaazienda = ",request.POST.get('sceltaazienda'))

      # attività su nuova/edit azienda
      if sceltaazienda == -1: #richiesta una nuova azienda
        print('sceltaazienda -1:',sceltaazienda)
        #return HttpResponseRedirect(reverse('azienda:editAzienda'))
      elif sceltaazienda == 0:
        print('sceltaazienda 0:',sceltaazienda)
        request.session['AziendaIdEdit'] = 0
        print('AziendaId',request.session['AziendaIdEdit'])
        return HttpResponseRedirect(reverse('azienda:editAzienda'))
      else:
        try:
          azienda = Azienda.objects.get(pk=sceltaazienda)
          data['azienda'] = azienda
          request.session['AziendaId'] = azienda.id
          request.session['SedeId'] = -1 
        except Azienda.DoesNotExist as dne:
          print("errore, oggetto inesistente",dne)



    if "sceltasede" in request.POST:
      sceltasede = request.POST.get('sceltasede')
      try:
        sceltasede = int(sceltasede)
        request.session['SedeId'] = sceltasede
      except ValueError as ve:
        print("Non e' stata fatta la scelta corretta",ve)
        return HttpResponseRedirect(reverse('azienda:welcome'))

      print("sceltasede = ",request.POST.get('sceltasede'))

      if sceltasede == -1:
        print('sceltasede -1:',sceltasede)
        if 'sede' in data:
          del data['sede']
      elif sceltasede == 0: #richiesta una nuova azienda
        print('sceltasede 0:',sceltasede)
        request.session['SedeIdEdit'] = 0
        return HttpResponseRedirect(reverse('azienda:editSede'))
      else:
        try:
          sede = Sede.objects.get(pk=sceltasede)
          data['sede'] = sede
          request.session['SedeId'] = sede.id
        except Sede.DoesNotExist as dne:
          print("errore,oggetto inesistente",dne)

    if  "utenti" in request.POST:
      print('premuto tasto utenti')
      return HttpResponseRedirect(reverse('utente:welcome'))

    if 'documenti' in request.POST:
      # stato premuto il tasto documenti
      print('premuto tasto documenti')
      return HttpResponseRedirect(reverse('documento:welcome'))

    if "attivita" in request.POST:
      print('premuto tasto attivita')
      print("azioenda:",azienda)
      data['listaAttivitaxAzienda']=getLogxAzienda(azienda)

    if 'comunicazioni' in request.POST:
      print('premuto tasto comunicazioni')
      return HttpResponseRedirect(reverse('comunicazione:welcome'))

    if 'parazienda' in request.POST:
      print('premuto tasto Par.Azienda')
      azid = request.POST.get('parazienda')
      print('azienda passata',request.POST.get('parazienda'))
      azienda = Azienda.objects.get(pk=azid)
      request.session['AziendaId'] = azienda.id
      request.session['AziendaIdEdit'] = azienda.id
      return HttpResponseRedirect(reverse('azienda:editAzienda'))

    if 'parsede' in request.POST:
      print('premuto tasto Par.Sede')
      seid = request.POST.get('parsede')
      print('sede passata',request.POST.get('parsede'))
      sede = Sede.objects.get(pk=seid)
      request.session['SedeId'] = sede.id
      request.session['SedeIdEdit'] = sede.id
      return HttpResponseRedirect(reverse('azienda:editSede'))

    if 'amministratore' in request.POST:
      print(' premuto tasto Amministratore')
      return HttpResponseRedirect(reverse('amministratore:welcome'))

  #################
  #tmplist1 = dict()
  #for tmp in assegnazioneazienda:
  #  tmplist1[tmp.azienda.id] = tmp.azienda
  #print(len(tmplist1))

  #tmplist = list()
  #for k in tmplist1:
  #  tmplist.append(tmplist1[k])

  #data['aziendaLista'] = tmplist
  data['AziendaLista'] = assegnazioneazienda
  ##############################

  if 'azienda' in data:
    print('azienda selezionata:',data['azienda'].nome)
    data['sedeLista'] = data['azienda'].sede_set.all().order_by('nome')

  print('numero aziende',len(data['AziendaLista']))
  if 'sedeLista' in data:
    print('numero di sedi',len(data['sedeLista']))

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

# creazione azienda
def editAzienda(request):
  AdminId = request.session['AdminId']

  data={}
  data['HeaderTitle'] = getConfig('HeaderTitle')
  user = data['admin'] = Amministratore.objects.get(pk=AdminId)

  azienda = None
  if 'AziendaIdEdit' in request.session:
    print('trovato riferimento AziendaIdEdit',request.session.get('AziendaIdEdit'))
    azid = request.session.get('AziendaIdEdit')
    try:
      azienda = Azienda.objects.get(pk=azid)
      print('azienda trovata',azienda.nome)
    except Azienda.DoesNotExist as dnf:
        print(dnf)

  data['permesso_amministratore'] = getAMP(AdminId)
  data['permesso_azienda'] = getAZP(azienda,AdminId)
  #data['permesso_sede'] = getSEP(sede,AdminId)

  print('permesso_amministratore',data['permesso_amministratore'])
  print('permesso_azienda',data['permesso_azienda'])
  #print('permesso_sede',data['permesso_sede'])

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

  if request.method == "POST":
    print("Richiesta creazione nuova azienda")
    nuovaazienda = formAzienda(request.POST)
    if nuovaazienda.is_valid():
      print("il form e' valido",request.POST)
      if not azienda:
        azienda = Azienda()
      azienda.nome = nuovaazienda.cleaned_data.get('nome')
      azienda.mail = nuovaazienda.cleaned_data.get('mail')
      azienda.partitaiva = nuovaazienda.cleaned_data.get('partitaiva')
      azienda.cambiopassword = nuovaazienda.cleaned_data.get('cambiopassword')
      azienda.forzanuovapassword = nuovaazienda.cleaned_data.get('forzanuovapassword')
      azienda.save()
      request.session['AziendaIdEdit'] = azienda.id
      print('azienda:',azienda.id)

      assegnazione = AssegnazioneAzienda()
      assegnazione.azienda=azienda
      assegnazione.amministratore=Amministratore.objects.get(pk=AdminId)
      assegnazione.save()

      del request.session['AziendaIdEdit']
      return HttpResponseRedirect(reverse('azienda:welcome'))
    else:
      print("form non valido")
      data['azienda'] = formAzienda(request.POST)
  else: #non è un post
    print("Non è un post")
    formAziendaField = None
     
    if azienda:
        print('Abbiamo azienda',azienda.nome)
        tmp = dict()
        tmp['id'] = azienda.id
        tmp['nome'] = azienda.nome
        tmp['partitaiva'] = azienda.partitaiva
        tmp['mail'] = azienda.mail
        tmp['forzanuovapassword'] = azienda.forzanuovapassword
        tmp['cambiopassword'] = azienda.cambiopassword
        formAziendaField = formAzienda(tmp)
    else:
        tmp = dict()
        tmp['nome'] = ''
        tmp['partitaiva'] = ''
        tmp['mail'] = user.mail
        tmp['forzanuovapassword'] = False
        tmp['cambiopassword' ] = False
        formAziendaField = formAzienda(tmp)

    data['azienda'] = formAziendaField

  return render(request,'azienda.editAzienda.html',data)

def editSede(request):
  AdminId = request.session['AdminId']
  AziendaId = request.session['AziendaId']
  print("AziendaId",AziendaId)

  data={}
  data['HeaderTitle'] = getConfig('HeaderTitle')
  admin = data['admin'] = Amministratore.objects.get(pk=AdminId)

  sede = None
  if 'SedeIdEdit' in request.session:
    print('trovato riferimento SedeIdEdit',request.session.get('SedeIdEdit'))
    seid = request.session.get('SedeIdEdit')
    try:
      sede = Sede.objects.get(pk=seid)
      print('sede trovata',sede.nome)
    except Sede.DoesNotExist as dne:
      print('Sede indicata inesistente',dne)
      sede = Sede()
      sede.azienda = Azienda.objects.get(pk=AziendaId)
      sede.cambiopassword = sede.azienda.cambiopassword
      sede.forzanuovapassword = sede.azienda.forzanuovapassword

  data['permesso_amministratore'] = getAMP(AdminId)
  data['permesso_azienda'] = getAZP(AziendaId,AdminId)
  data['permesso_sede'] = getSEP(sede,AdminId)

  print('permesso_amministratore',data['permesso_amministratore'])
  print('permesso_azienda',data['permesso_azienda'])
  print('permesso_sede',data['permesso_sede'])

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

  if request.method == "POST":
    print("Richiesta creazione nuova azienda")
    nuovasede = formSede(request.POST)
    if nuovasede.is_valid():
      print("il form e' valido",request.POST)
      sede.nome = nuovasede.cleaned_data.get('nome')
      sede.mail = nuovasede.cleaned_data.get('mail')
      sede.cambiopassword = nuovasede.cleaned_data.get('cambiopassword')
      sede.forzanuovapassword = nuovasede.cleaned_data.get('forzanuovapassword')
      sede.info = nuovasede.cleaned_data.get('info')
      sede.identificativo = nuovasede.cleaned_data.get('identificativo')
      sede.save()
      print('salvataggio sede',nuovasede.cleaned_data)
      request.session['SedeIdEdit'] = sede.id
      print('sede:',sede.id)
      print('azienda',sede.azienda.nome)

      # verifica assegnazione
      az = AssegnazioneSede.objects.filter(sede=sede,amministratore=admin)
      print('assegnazione',az)
      if not az:
        az = AssegnazioneSede()
        az.sede=sede
        az.amministratore=admin
        az.save()
        print(sede.nome,admin.nome)
        print('az.admin',az.sede,az.amministratore.nome)
      return HttpResponseRedirect(reverse('azienda:welcome'))
    else:
      print("form non valido")
      data['sede'] = formSede(request.POST)
  else: #non è un post
    print("Non è un post")
    formSedeField = None
    tmp = dict()
    tmp['nome'] = sede.nome
    tmp['info'] = sede.info
    tmp['identificativo'] = sede.identificativo
    tmp['cambiopassword'] = sede.cambiopassword
    tmp['forzanuovapassword'] = sede.forzanuovapassword
    print('stato tmp',tmp)
    formSedeField = formSede(tmp)
    data['sede'] = formSedeField

  return render(request,'azienda.editSede.html',data)
 
