import urllib
import wave
from PIL.Image import Image
from django.contrib.auth import authenticate
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.contrib.auth import login as do_login
from django.contrib.auth import logout as do_logout
from numpy.random import random, randint
from rek.models import Formulario, Seccion, Respuesta, PaginaPrincipal,Usuario, DatosPersonales, Informacion,RespuestaInfo
from django.views.decorators.csrf import csrf_protect, csrf_exempt
from google.cloud import storage
import json
from django.http import QueryDict, HttpResponse
import os
from django.contrib.auth.decorators import login_required
from zipfile import ZipFile
from datetime import date, time
import xlsxwriter
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="labcredential.json"

# Create your views here.

# metode que retorna la pàgina principal de l'aplicació
@csrf_exempt
def index(request):
    return render(request, 'index.html')


# mostra la pàgina on es troben tots els fomularis de l'administrador concret
@csrf_exempt
@login_required(login_url='/login/')
def adminprofile(request, username):
    forms = Formulario.objects.filter(admin=username)
    return render(request, 'adminProfile.html', {"forms": forms})


# per veure la pagina d'editar les dades personals de l'administrador
@csrf_exempt
@login_required(login_url='/login/')
def adminedit(request, username):
    admin_user = User.objects.get(username=username)
    return render(request, 'adminEdit.html', {"admin_user": admin_user})


# retorna totes les dades d'un formulari
# permet la visualització del formulari a l'usuari no registrat
@csrf_exempt
def viewForm(request, formulario):
    form = Formulario.objects.get(id=int(formulario))
    secciones = Seccion.objects.filter(formulario=formulario).order_by('posicion')
    datosPersonales = DatosPersonales.objects.get(formulario=int(formulario))
    informaciones = Informacion.objects.filter(datosPersonales=datosPersonales.id).order_by('posicion')
    usuario = Usuario.objects.latest('id')
    last_id = usuario.id + 1
    return render(request, 'contestar.html', {"formulario": form,
                                              "secciones": secciones,
                                              "numDatos": datosPersonales.numDatos,
                                              "informaciones": informaciones,
                                              "lastusuario": str(last_id)})


# retorna totes les dades d'un formulari
# permet la visualització del formulari a l'administrador
@csrf_exempt
@login_required(login_url='/login/')
def viewFormAdmin(request, formulario):
    form = Formulario.objects.get(id=int(formulario))
    secciones = Seccion.objects.filter(formulario=formulario).order_by('posicion')
    datosPersonales = DatosPersonales.objects.get(formulario=int(formulario))
    informaciones = Informacion.objects.filter(datosPersonales=datosPersonales.id).order_by('posicion')
    usuario = Usuario.objects.latest('id')
    last_id = usuario.id + 1
    return render(request, 'verFormulario.html', {"formulario": form,
                                              "secciones": secciones,
                                              "numDatos": datosPersonales.numDatos,
                                              "informaciones": informaciones,
                                              "lastusuario": last_id})


# obte les dades essencials per poder editar un formulari
# en aquest mètode NO s'edita el formulari, nomes retorna les dades actuals
@csrf_exempt
@login_required(login_url='/login/')
def editForm(request, formulario):
    form = Formulario.objects.get(id=int(formulario))
    pagina = PaginaPrincipal.objects.get(formulario=int(formulario))
    secciones = Seccion.objects.filter(formulario=formulario).order_by('posicion')
    datosPersonales = DatosPersonales.objects.get(formulario=int(formulario))
    informaciones = Informacion.objects.filter(datosPersonales=datosPersonales.id).order_by('posicion')
    return render(request, 'editForm.html', {"formulario": form,
                                             "pagina": pagina,
                                              "secciones": secciones,
                                              "numDatos": datosPersonales.numDatos,
                                              "informaciones": informaciones})


# per descarregar les respostes NOMES D'UN formulari, NO les respostes de tots
@csrf_exempt
@login_required(login_url='/login/')
def descargar(request, formulario):

    # init objects bdd
    audios = []
    form = Formulario.objects.get(id=int(formulario))
    num = form.numRespuestas
    secciones = Seccion.objects.filter(formulario=formulario).order_by('posicion')
    respuestas_list = []

    # recorrem totes les seccions del formulari
    for s in secciones:
        respuestas = list(Respuesta.objects.filter(seccion=s.id))

        """ mirem les respostes de cada secció i afegim tot a una llista:
                - respuestas_list: dades personals
                - audios: els noms dels àudios a descarregar     """

        for x in respuestas:
            respuestas_list.append(x)
            audios.append(x.audio)

    # fem un excel amb les dades personals dels usuaris a través del mètode excel
    excel(int(formulario))

    # creem un zip amb tots els fitxers a retornar
    name_zip = descargalocal(audios)

    return render(request, 'descargarAudios.html', {"formulario": form.titulo, "zip": name_zip})


# per crear un excel amb les dades personals dels usuaris del formulari passat per paràmetre
def excel(idform):

    form = Formulario.objects.get(id=idform)
    datosPersonales = DatosPersonales.objects.get(formulario=form)
    info = Informacion.objects.filter(datosPersonales=datosPersonales)

    cols = ['Usuario']
    dict_res = {}

    # iterem per totes les dades que demana el formulari
    for i in info:
        # les dades representaran les columnes
        cols.append(i.pregunta)
        respuestas = RespuestaInfo.objects.filter(informacion=i)

        """ iterem per cada una de les respostes donades i les guardem a un diccionari que serà: 
                - key: id de l'usuari
                - value: valor de la resposta """
        for r in respuestas:
            if r.usuario.id in dict_res.keys():
                dict_res[r.usuario.id].append(r.respuesta)
            else:
                dict_res[r.usuario.id] = [r.respuesta]

    # creem l'excel anomenat datosusuarios.xlsx
    workbook = xlsxwriter.Workbook('media/datosusuarios.xlsx')
    worksheet = workbook.add_worksheet()

    row = 0
    col = 0

    # iterem per les columnes per afegir el header de cada una, que serà la dada demanada
    for c in cols:
        worksheet.write(row, col, c)
        #worksheet.write(row, col + 1, cost)
        col += 1

    row = 1

    # a cada una de les rows posem el valor respòs per l'usuari
    for key, value in dict_res.items():
        col = 0
        worksheet.write(row, col, key)
        col = col + 1
        for x in value:
            worksheet.write(row, col, x)
            col = col + 1
        row = row + 1

    workbook.close()
    return True


# per descarregar els audios introduits per paràmetre
def descargalocal(audios):

    # inicialitzem la data de la descarrega, que serà el nom del zip
    today = date.today()
    d = today.strftime("%d%m%Y")
    zipObj = ZipFile('media/' + d + '.zip', 'w')

    # per cada un dels audios, fem una connexió amb el sistema de fitxers i el descarreguem
    for a in audios:
        try:
            storage_client = storage.Client()
            bucket = storage_client.bucket('lab-fonetica-rek')
            blob = bucket.blob(a)
            blob.download_to_filename('media/' + a + '.wav')
            zipObj.write('media/' + a + '.wav')
        except Exception:
            pass

    # afegim el fitxer excel creat
    zipObj.write('media/datosusuarios.xlsx')
    zipObj.close()
    return d


# per descarregar les respostes de TOTS els formularis
@csrf_exempt
@login_required(login_url='/login/')
def descargartodos(request):
    storage_client = storage.Client()
    bucket = storage_client.bucket('lab-fonetica-rek')

    audios = []
    forms_id = []
    forms = Formulario.objects.filter(admin=request.user.username)
    # per cada form agafem les seccions
    for f in forms:
        forms_id.append(f.id)
        secciones = Seccion.objects.filter(formulario=f).order_by('posicion')
        # per cada seccio mirem les respostes
        for s in secciones:
            respuestas = list(Respuesta.objects.filter(seccion=s))
            # per cada resposta afegim l'audio a una llista
            for x in respuestas:
                audios.append(x.audio)

    # creem l'excel on cada formulari sera una worksheet
    exceltodos(forms_id)
    # creem el zip amb les audios
    name_zip = descargalocal(audios)

    return render(request, 'descargarAudios.html', {"formulario": 'all_forms', "zip": name_zip})


# per crear un excel de TOTS els formularis.
# funciona igual que el metode excel, pero en aquest cas cada fulla de l'excel representarà un formulari
def exceltodos(forms_id):
    workbook = xlsxwriter.Workbook('media/datosusuarios.xlsx')
    for idform in forms_id:
        form = Formulario.objects.get(id=idform)

        datosPersonales = DatosPersonales.objects.get(formulario=form)
        info = Informacion.objects.filter(datosPersonales=datosPersonales)

        cols = ['Usuario']
        dict_res = {}
        for i in info:
            cols.append(i.pregunta)
            respuestas = RespuestaInfo.objects.filter(informacion=i)
            for r in respuestas:
                if r.usuario.id in dict_res.keys():
                    dict_res[r.usuario.id].append(r.respuesta)
                else:
                    dict_res[r.usuario.id] = [r.respuesta]

        worksheet = workbook.add_worksheet(form.titulo)

        row = 0
        col = 0
        for c in cols:
            worksheet.write(row, col, c)
            #worksheet.write(row, col + 1, cost)
            col += 1

        row = 1
        for key, value in dict_res.items():
            col = 0
            worksheet.write(row, col, key)
            col = col + 1
            for x in value:
                worksheet.write(row, col, x)
                col = col + 1
            row = row + 1
    #worksheet.write(row, 0, 'Total')
    #worksheet.write(row, 1, '=SUM(B1:B4)')

    workbook.close()
    return True


# per veure la pàgina principal del formulari corresponent
@csrf_exempt
def viewFormPaginaPrincipal(request, formulario):
    form = Formulario.objects.get(id=int(formulario))
    p = PaginaPrincipal.objects.get(formulario=int(formulario))
    return render(request, 'paginaPrincipalContestar.html', {"pagina": p,
                                                             "formulario": formulario})


# retorna la pagina per crear un nou formulari
@csrf_exempt
@login_required(login_url='/login/')
def nuevoform(request):
    return render(request, 'nuevoFormulario.html')


# per eliminar un formulari
@csrf_exempt
@login_required(login_url='/login/')
def eliminarForm(request):
    if request.method == 'POST':
        delete_audios = []
        deletebucketimage = []

        f = Formulario.objects.get(id=request.POST.get('id'))
        sections = Seccion.objects.filter(formulario=f.id)
        pagina = PaginaPrincipal.objects.get(formulario=f.id)
        pagina.delete()

        # iterem per cada una de les respostes i les seccions i les borrem de la base de dades
        if f.numRespuestas > 0:
            for s in sections:
                delete_audios.append(s.audio)
                if s.imagen:
                    deletebucketimage.append(s.imagen)
                respuesta = Respuesta.objects.filter(seccion=s.id)
                for r in respuesta:
                    delete_audios.append(r.audio)
                respuesta.delete()
        else:
            for s in sections:
                delete_audios.append(s.audio)

        # tambe borrem totes les dades personals de la base de dades
        dp = DatosPersonales.objects.get(formulario=f.id)
        info = Informacion.objects.filter(datosPersonales=dp.id)
        for i in info:
            respuestaInfo = RespuestaInfo.objects.filter(informacion=i.id)
            respuestaInfo.delete()
        info.delete()
        dp.delete()

        f.delete()
        sections.delete()

        # a mes s'esborrem els audios i les imatges del sistema d'emmagatzematge amb el metode deleteAudioBucket
        deleteAudioBucket(delete_audios, deletebucketimage)

        return render(request, 'nuevoFormulario.html')


# per esborrar els audios o les imatges del bucket de google a partir dels parametres passats
def deleteAudioBucket(delete_audios, deletebucketimage):
    for a in delete_audios:
        storage_client = storage.Client()
        bucket = storage_client.bucket('lab-fonetica-rek')
        blob = bucket.blob(a)
        blob.delete()

    for i in deletebucketimage:
        delete_image(i)
    return True


# per esborrar les imatges del bucket de google cloud storage
def delete_image(filename):
    storage_client = storage.Client()
    bucket = storage_client.bucket('lab-fonetica-rek')
    blob = bucket.blob(filename)
    blob.delete()
    return True


# retorna la url del formulari que sempre és: host/contestar/idFormulari/paginaPrincipal/
@csrf_exempt
@login_required(login_url='/login/')
def generarurl(request):
    if request.method == 'POST':
        host = request.get_host()
        id = request.POST.get('id')
        urldata = host + '/contestar/' + id + '/paginaPrincipal/'

        data = {}
        data['result'] = urldata
        return HttpResponse(json.dumps(data), content_type="application/json")


# per guardar la pagina principal
@csrf_exempt
@login_required(login_url='/login/')
def submitPaginaPrincipal(request):
    if request.method == 'POST':
        p = PaginaPrincipal.objects.get(admin=request.user.username)
        p.titulo = request.POST.get('titulo')
        p.subtitulo = request.POST.get('subtitulo')
        p.cuerpo = request.POST.get('cuerpo')
        p.save()
        return render(request, 'nuevoFormulario.html')


# per editar i guardar les noves dades de l'admin
@csrf_exempt
@login_required(login_url='/login/')
def submitDatosAdmin(request):
    if request.method == 'POST':
        admin = User.objects.get(username=request.user.username)
        admin.set_password(request.POST.get('password'))
        admin.first_name = request.POST.get('firstname')
        admin.last_name = request.POST.get('lastname')
        admin.email = request.POST.get('email')
        admin.save()
        return render(request, 'nuevoFormulario.html')


# crea un nou formulari amb totes les dades corresponents
@csrf_exempt
def formdata(request):
    if request.method == 'POST':
        num_sect = int(request.POST.get('numSecciones'))
        # creem el formulari
        f = Formulario(admin=request.user.username, titulo=request.POST['titulo'], numSecciones=num_sect, numRespuestas=0)
        f.save()

        # creem la pagina principal
        paginaPrincipal = PaginaPrincipal(formulario=f, titulo=request.POST['tituloPagina'], subtitulo=request.POST['subtitulo'], cuerpo=request.POST['cuerpo'])
        paginaPrincipal.save()

        num_sect = int(request.POST.get('numSecciones'))

        # per totes les seccions creem una nova depenent dels parametres que ha sigut introduits
        for i in range(num_sect):
            seccion = 'seccion'+str(i)
            audio_str = request.POST.get(seccion + '[audio]')
            if audio_str:
                audio_str += '.wav'
            else:
                audio_str = ''

            # si la seccio te imatge l'inicialitzem, sino la posem a null
            if request.POST.get(seccion + '[imagen]'):
                response = urllib.request.urlopen(request.POST.get(seccion + '[imagen]'))
                namefile = str(randint(0, 9999)) + '.jpeg'
                with open('static/' + namefile, 'wb') as fit:
                    fit.write(response.file.read())
                    # per guardar la imatge al bucket
                    upload_image(namefile)

                s = Seccion(formulario=f,
                            tipoContexto=request.POST.get(seccion+'[tipo]'),
                            texto=request.POST.get(seccion+'[texto]'),
                            audio=audio_str,
                            imagen=namefile,
                            posicion=i)
            else:
                s = Seccion(formulario=f,
                            tipoContexto=request.POST.get(seccion + '[tipo]'),
                            texto=request.POST.get(seccion + '[texto]'),
                            audio=audio_str,
                            imagen=request.POST.get(seccion + '[imagen]'),
                            posicion=i)
            s.save()

        # fem el mateix per les dades personals
        num_datos = int(request.POST.get('numDatos'))
        datosPersonales = DatosPersonales(formulario=f, numDatos=num_datos)
        datosPersonales.save()

        for j in range(num_datos):
            informacion = 'informacion' + str(j)
            i = Informacion(datosPersonales=datosPersonales,
                            tipo=request.POST.get(informacion+'[tipo]'),
                            pregunta=request.POST.get(informacion+'[pregunta]'),
                            posicion=request.POST.get(informacion+'[posicion]'))
            i.save()


        return render(request, 'nuevoFormulario.html', {})
    else:
        return render(request, 'nuevoFormulario.html', {})


# per guardar una imatge al bucket
def upload_image(image):
    storage_client = storage.Client()
    bucket = storage_client.bucket('lab-fonetica-rek')
    blob = bucket.blob(image)

    blob.upload_from_filename('static/'+image)

    return True


# edita el formulari amb les dades passades pel request
@csrf_exempt
@login_required(login_url='/login/')
def formedit(request):
    if request.method == 'POST':

        num_sect_anterior = int(request.POST.get('numSeccionesAnterior'))
        num_sect = int(request.POST.get('numSecciones'))
        id_formulari = int(request.POST['formulario_id'])

        f = Formulario.objects.get(id=id_formulari)
        f.titulo = request.POST['titulo']

        borradas = request.POST.get('deleted_sections')
        secciones_borradas = borradas.split(',')
        num_secciones_borradas = request.POST.get('num_deleted_sections')

        paginaPrincipal = PaginaPrincipal.objects.get(formulario=f)
        paginaPrincipal.titulo = request.POST['tituloPagina']
        paginaPrincipal.subtitulo = request.POST['subtitulo']
        paginaPrincipal.cuerpo = request.POST['cuerpo']

        # per cada una de les seccions del formulari
        for i in range(num_sect):
            # si la seccio no estava al formulari significa que és una nova afegida per tant la creem
            if i >= num_sect_anterior:
                seccion = 'seccion' + str(i)
                audio_str = request.POST.get(seccion + '[audio]')
                if audio_str:
                    audio_str += '.wav'
                else:
                    audio_str = ''
                s = Seccion(formulario=f,
                            tipoContexto=request.POST.get(seccion + '[tipo]'),
                            texto=request.POST.get(seccion + '[texto]'),
                            audio=audio_str,
                            imagen=request.POST.get(seccion + '[imagen]'),
                            posicion=i)
                s.save()
            # si la seccio ja estava al formulari
            else:
                seccion = 'seccion' + str(i)
                id_seccion = request.POST.get(seccion+'[id]')
                if id_seccion:
                    # si no esta entre les seccions borrades, la editem
                    if id_seccion not in secciones_borradas:
                        s = Seccion.objects.get(id=id_seccion)
                        s.tipoContexto = request.POST.get(seccion+'[tipo]')
                        s.texto = request.POST.get(seccion+'[texto]')
                        if(s.audio != (request.POST.get(seccion+'[audio]')+'.wav') and s.audio != (request.POST.get(seccion+'[audio]'))):
                            s.audio = request.POST.get(seccion+'[audio]')+'.wav'
                        s.save()

        paginaPrincipal.save()
        num_datos = int(request.POST.get('numDatos'))
        num_datos_anterior = int(request.POST.get('numDatosAnterior'))

        #agafem els datosPersonales
        i = Informacion.objects.get(id=request.POST.get('informacion0'+'[id]'))
        dp = DatosPersonales.objects.get(id=i.datosPersonales.id)
        dp.numDatos = num_datos

        # l'algorisme seguit és el mateix que amb les seccions
        for j in range(num_datos):
            if j >= num_datos_anterior:
                informacion = 'informacion' + str(j)
                i = Informacion(datosPersonales=dp,
                                tipo=request.POST.get(informacion + '[tipo]'),
                                pregunta=request.POST.get(informacion + '[pregunta]'),
                                posicion=request.POST.get(informacion + '[posicion]'))
                i.save()
            else:
                informacion = 'informacion' + str(j)
                id_info = request.POST.get(informacion+'[id]')
                i = Informacion.objects.get(id=id_info)
                i.pregunta = request.POST.get(informacion+'[pregunta]')
                i.tipo = request.POST.get(informacion+'[tipo]')
                i.save()

        # finalment esborrem les seccions esborrades al html
        for x in range(len(secciones_borradas)):
            id = secciones_borradas[x]
            if id:
                sec = Seccion.objects.get(id=id)
                if sec.imagen:
                    delete_image(sec.imagen)
                sec.delete()
                num_sect = num_sect - 1

        f.numSecciones = num_sect
        f.save()
        dp.save()
        return render(request, 'nuevoFormulario.html')


# per guardar les respostes
@csrf_exempt
def formcontestar(request):
    if request.method == 'POST':
        num_datos = int(request.POST.get('numDatos'))
        usuario = Usuario(numDatos=num_datos)
        usuario.save()

        id_user = int(usuario.id)

        num_sect = int(request.POST.get('numSecciones'))
        idSection = 0

        # per cada resposta guardem un nou objecte Respuesta
        for i in range(num_sect):
            seccion = 'seccion'+str(i)
            idSection = request.POST.get(seccion+'[id_seccion]')
            s = Seccion.objects.get(id=idSection)
            audio_str = str(request.POST.get('formtitulo')) + ', seccion ' + str(int(i)+1) + ', usuario ' + str(id_user)
            r = Respuesta(seccion=s,
                        audio=audio_str,
                        usuario=usuario)
            r.save()

        # fem el mateix amb les dades personals
        for i in range(num_datos):
            info = 'dato' + str(i)
            idInfo = request.POST.get(info+'[informacion]')
            i = Informacion.objects.get(id=idInfo)
            r_info = RespuestaInfo(usuario=usuario,
                                   informacion=i,
                                   respuesta=request.POST.get(info+'[respuesta]'))
            r_info.save()


        # augmentem el numero de respostes del formulari
        s = Seccion.objects.get(id=idSection)
        form = s.formulario
        form.numRespuestas += 1
        form.save()

        return render(request, 'nuevoFormulario.html')


# per obtenir la pagina principal del formulari
@csrf_exempt
def getPaginaPrincipal(request):
    p = PaginaPrincipal.objects.get(admin=request.user.username)

    return render(request, "editPagina.html", {'pagina': p})


# per guardar un audio a l'hora de crear un formulari
@csrf_exempt
def grafic(request, framerate):
    if request.method == 'POST':

        # inicialitzem el nom
        str_data = str(request.body, 'utf-8', errors='replace')
        name = int(str_data.find('filename')) + 10
        str_filename = ""
        for lletra in range (name,len(str_data)):
            if str_data[lletra] != '"':
                str_filename += str_data[lletra]
            else: break

        # init parametres de gravacio
        nchannels = 1
        sampwidth = 2
        name = str_filename + '.wav'
        audio = wave.open('static/audios/'+name, 'wb')
        audio.setnchannels(nchannels)
        audio.setsampwidth(sampwidth)
        audio.setframerate(int(framerate))
        audio.writeframes(request.body)
        audio.close()

        # l'afegim al bucket
        storage_client = storage.Client()
        bucket = storage_client.bucket('lab-fonetica-rek')
        blob = bucket.blob(name)

        blob.upload_from_filename('static/audios/'+name)

        """file = open('static/audios/'+name, 'r', encoding="UTF-8")

        s3 = boto3.resource(
            's3',
            region_name='eu-west-3',
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY
        )
        s3.Object(settings.AWS_STORAGE_BUCKET_NAME, name).put(Body=file.encode('utf-8'))"""

        return redirect('nuevoform')


# per guardar un audio al contestar l'usuari
@csrf_exempt
def graficcontestar(request, formulario, seccion, framerate, lastusuario):
    if request.method == 'POST':

        # init params
        nextid = int(lastusuario)
        nchannels = 1
        sampwidth = 2

        # init el nom de l'audio que ha de ser: nom_form, seccion 1, usuario 34
        name = formulario + ', seccion ' + seccion + ', usuario ' + str(nextid) + '.wav'

        # creo audio en local (se borrara cuando se haga un reset del static files)
        audio = wave.open('static/audios/' + name, 'wb')

        int_framerate = int(framerate)

        audio.setnchannels(nchannels)
        audio.setsampwidth(sampwidth)
        audio.setframerate(int_framerate)
        audio.writeframes(request.body)
        audio.close()

        # pujo audio a storage a partir de local

        storage_client = storage.Client()
        bucket = storage_client.bucket('lab-fonetica-rek')
        blob = bucket.blob(formulario + ', seccion ' + seccion + ', usuario ' + str(nextid))

        blob.upload_from_filename('static/audios/' + name)

        return redirect('nuevoform')


# per iniciar sessió
def login(request, backend="django.contrib.auth.backends.ModelBackend"):
    if request.method == 'POST':
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(username=username, password=password)

        # si les credencials son correctes iniciem sessió amb do_login()
        if user is not None:
            do_login(request, user, backend)
            request.session["login"] = True
            redirect_page = '/'+username+'/'
            return redirect(redirect_page)
        else:
            request.session["login"] = False
            return render(request, "login.html", {'errorLogin': True})
    else:
        login_form = AuthenticationForm
        # Si llegamos al final renderizamos el formulario
    return render(request, "login.html", {'login_form': login_form})


# metode que retorna el template de la pàgina d'agraïment després de contestar el formulari
@csrf_exempt
def gracias(request):
    return render(request, 'gracias.html')


# tanca la sessió
def logout(request):
    # Finalizamos la sesión
    do_logout(request)
    # Redireccionamos a la portada
    return redirect('/')