from django.shortcuts import render
from sicurezza.views import *

from .models import *
from .forms import *

import json
from mqtt import views as m

# Create your views here.
def filtroList(request):
  session = getSessionParms(request)
  userauth = session['_userauth_']
  filtro2edit = session['_filtro2edit_']
  request.session['from']='filtro:FiltroList'

  try:
    utenteautorizzato = User.objects.get(pk=userauth)
  except User.DoesNotExist as dne:
    return  HttpResponseRedirect(reverse('Login:login',args={}))


  value={}

  value['utenteautorizzato'] = utenteautorizzato
  value['navbar'] = True

  print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  securitylist =  getSecurityList(securityrow)
  value['securitylist'] = securitylist
  value['securityrow'] = securityrow
  value['securityrowLen'] = len(securityrow)

  c = m.start()
  m.publish(c,"Messaggio/FiltroEmail","Accesso alla sezione filtri  da {}".format(utenteautorizzato.nome))

  if request.method=="POST":

    if "Nuovo Filtro" in request.POST:
      print('nuovo filtro')
      request.session['_filtro2edit_'] = 0
      return  HttpResponseRedirect(reverse('Filtro:FiltroEdit',args={}))

    if "edit" in request.POST:
      print('id da editare',request.POST['edit'])
      request.session['_filtro2edit_'] = request.POST['edit']

      return HttpResponseRedirect(reverse('Filtro:FiltroEdit',args={}))

    if "disable" in request.POST :
      print('id da disattivare',request.POST['disable'])
      idpost = request.POST['disable']
      f = Filtro.objects.get(pk=idpost)
      f.enabled=False
      f.save()

    if "enable" in request.POST:
      print('id da attivare',request.POST['enable'])
      idpost = request.POST['enable']
      f = Filtro.objects.get(pk=idpost)
      f.enabled=True
      f.save()

    if "delete" in request.POST:
      print('id da cancellare',request.POST['delete'])
      idpost = request.POST['delete']
      f = Filtro.objects.get(pk=idpost)
      f.delete()

  value['filtro'] = Filtro.objects.all().order_by('id')
  return render(request,"Filtro.List.html",value)


def filtroEdit(request):
  session = getSessionParms(request)
  userauth = session['_userauth_']
  filtro2edit = session['_filtro2edit_']
  request.session['from']='Filtro:FiltroList'

  utenteautorizzato = User.objects.get(pk=userauth)

  value={}

  value['utenteautorizzato'] = utenteautorizzato
  value['navbar'] = True

  print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  securitylist =  getSecurityList(securityrow)
  value['securitylist'] = securitylist
  value['securityrow'] = securityrow
  value['securityrowLen'] = len(securityrow)

  value['Status'] = None

  filtro = Filtro()

  try:
    filtro = Filtro.objects.get(pk=filtro2edit)
  except Filtro.DoesNotExist as dne:
    print('valore filtro2edit non valido',filtro2edit)

  c = m.start()
  #m.publish(c,"Messaggio/FiltroEmail","Accesso all'edit filtro  da {}".format(utenteautorizzato.nome))

  if request.method == 'POST':

    print('metodo',request.method)

    # non effettua il salvataggio, ma ritorna alla lista FTP
    if 'Ritorno' in request.POST:
      return HttpResponseRedirect(reverse('Filtro:FiltroList'))

    formfiltro = formFiltro(request.POST)

    if formfiltro.is_valid():
      print('formfiltro.is_valid()',formfiltro.is_valid())

      filtro.filtro=formfiltro.cleaned_data.get('filtro')
      filtro.status=formfiltro.cleaned_data.get('status')
      filtro.destination= formfiltro.cleaned_data.get('destination')
      filtro.redirect = formfiltro.cleaned_data.get('redirect')
      filtro.dinput = formfiltro.cleaned_data.get('dinput')
      filtro.doutput = formfiltro.cleaned_data.get('doutput')
      filtro.header = formfiltro.cleaned_data.get('header')
      filtro.body = formfiltro.cleaned_data.get('body')
      filtro.enabled = formfiltro.cleaned_data.get('enabled')
      filtro.save()
      print('filtro:',filtro.status)
      # if viene selezionato il reject, parte una richiesta di pulizia coda per quel filtro
      if 'reject' in filtro.status and filtro.enabled:
        print('Eseguo mqtt')
        q={}
        q['op']='mqremove'
        q['filter'] = filtro.filtro
        q['header'] = filtro.header
        q['body'] = filtro.body
        m.publish(c,'Richiesta/FiltroEmail',json.dumps(q))

  temp = {}
  temp['filtro'] = filtro.filtro
  temp['status'] = filtro.status
  temp['destination'] = filtro.destination
  temp['redirect'] = filtro.redirect
  temp['dinput'] = filtro.dinput
  temp['doutput'] = filtro.doutput
  temp['header'] = filtro.header
  temp['body'] = filtro.body
  temp['enabled'] = filtro.enabled
  value['filtro'] = formFiltro(temp)
  value['ListStatus'] = value['filtro'].listStatus()
  print(value['ListStatus'])

  return render(request,'Filtro.Edit.html',value)

