from django.shortcuts import render
from django.http import HttpResponse

from .forms import *
from django.views.decorators.csrf import csrf_exempt
import os
from bpconverter.settings import MEDIA_ROOT
import PyPDF2
import re
import glob

def handle_uploaded_file(f):
    print(dir(f.chunks))
    counter = 0
    with open(os.path.join(MEDIA_ROOT,f.name), 'wb+') as destination:
        counter = counter +1
        print(counter)
        for chunk in f.chunks():
            #print(chunk) ok. qualcosa carica
            destination.write(chunk)

    print("{}/out/*.pdf".format(MEDIA_ROOT))

    listtoremove = glob.glob("{}/out/*.pdf".format(MEDIA_ROOT))
    for ltr in listtoremove:
      print('removing:',ltr)
      os.remove(ltr)

            
    return os.path.join(MEDIA_ROOT,f.name)

def esegue_conversione(inputfile):
  rec = re.compile('[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]',flags=re.I)

  print('apertura file')

  pdfr=None
  numpdfr=0
  try: 
    pdfr = PyPDF2.PdfReader(inputfile)
  except PyPDF2.errors.PdfReadError as pre:
    print('errore',pre)

  risultato = dict()
  if pdfr:  
    print('numero di pagine',len(pdfr.pages))
    numpdfr=len(pdfr.pages)
    codicefiscale=None
    listapagine={} #contiene il codice fiscale e le pagine in cui e' stato trovato

    for i in range(0,len(pdfr.pages)):
      pagina = pdfr.pages[i]
      testo = pagina.extract_text(0)
      # il testo estratto e' tutto carattere.
      trovato=re.search(rec,testo)
      if trovato:
        print('trovato',trovato[0])
        if trovato[0] in listapagine:
          listapagine[trovato[0]].append(i)
        else:
          listapagine[trovato[0]] = list()
          listapagine[trovato[0]].append(i)
          risultato[trovato[0]] = ''

    for k in listapagine:
      # per ogni codice fiscale, genera le pagine che corrispondono (listapagine[k])
      print(k,listapagine[k])

      writer = PyPDF2.PdfWriter()
      for kk in listapagine[k]:
        print('pagine da salvare',kk)
        writer.add_page(pdfr.pages[kk])

      r = open("{}/out/{}.pdf".format(MEDIA_ROOT,k),'wb')
      writer.write(r)
      r.close()
      risultato[k] = {'file':"{}/out/{}.pdf".format(MEDIA_ROOT,k),'pagine':listapagine[k]}

       
  else: risultato['errore']=[]

  #rimozione del file
  os.remove(inputfile)

  print('risultato',risultato)
  return (risultato,numpdfr)

@csrf_exempt
def frontpage(request):
  listaccepted = list()
  listaccepted.append('195.110.154.210')
  listaccepted.append('195.110.154.213')

  print('x_real_ip',request.META['HTTP_X_REAL_IP'])
  print('http_host',request.META['HTTP_HOST'])

  '''
  auth = False

  if 'HTTP_X_REAL_IP' in request.META:
    print('presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
    if request.META['HTTP_X_REAL_IP'] in listaccepted:
      print('found presente X_REAL_IP',request.META['HTTP_X_REAL_IP'])
      auth = True
  else:
      if 'HTTP_HOST' in request.META:
        if request.META['HTTP_HOST'] in listaccepted:
          auth = True

  if not auth:
    return HttpResponse("Accesso Non Autorizzato", status=503, headers={})
  '''

  data = {}
  print('request.method',request.method)
  if request.method == 'POST':
    form = UploadFileForm(request.POST,request.FILES)
    print('form is valid',form.is_valid())
    if form.is_valid():
      nomefile = request.FILES['filecaricato']
      print('nome file',nomefile)

      filesalvato = handle_uploaded_file(nomefile)
      risultato =  esegue_conversione(filesalvato)

      data['listafiles'] = risultato[0]
      data['numeropagine'] = risultato[1]

      print('dati passati al template',data)

  return render(request,'frontpage.html',data)

