#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

from django.core.exceptions import PermissionDenied
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404
from django.http import HttpResponse,HttpResponseRedirect

from app.deco import role_required
from app.views import get_info

@login_required
def descarga_tarea(request,slug,id,alumno):
    import csv
    from tarea.models import Tarea,Pregunta

    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    if profile.user.usuario.rol == "profesor":
        tarea = get_object_or_404(Tarea,actividades__id=id,actividades__asignatura__slug__iexact=slug,realizado=True,user__username=alumno)
        preguntas_tarea = Pregunta.objects.filter(pregunta_evaluada=None,actividad__id=id,realizador__usuario__user__username=alumno)
    else:
        tarea = get_object_or_404(Tarea,actividades__id=id,actividades__asignatura__slug__iexact=slug,realizado=True,user__username=profile.user.username)
        preguntas_tarea = Pregunta.objects.filter(pregunta_evaluada=None,actividad__id=id,realizador__usuario__user__username=profile.user.username)

    # Seguridad viene sin referenciar
    if not request.META.has_key( 'HTTP_REFERER' ):
        raise PermissionDenied

    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename="'+alumno.encode('utf-8')+'-'+tarea.actividades.name.encode('utf-8')+'.csv"'

    archivo = csv.writer(response)
    archivo.writerow(["Numero", "Pregunta", "Tipo","Valor","Respuesta","Puntuacion"])
    # Para Pregunta
    for pregunta in preguntas_tarea.all():
        if pregunta.realizador == tarea.user:
            if pregunta.type != 1:
                if len(pregunta.tarea_eleccion_pregunta.all())>0:
                    eleccion = pregunta.tarea_eleccion_pregunta.all()[0]
                    archivo.writerow([pregunta.nr, pregunta.text.encode('utf-8'), pregunta.type, pregunta.val,eleccion.name.encode('utf-8'),eleccion.val])
            else:
                if pregunta.tarea_respuesta_pregunta.all():
                    if len(pregunta.tarea_respuesta_pregunta.all())>0:  
                        respuesta = pregunta.tarea_respuesta_pregunta.all()[0]
                        archivo.writerow([pregunta.nr, pregunta.text.encode('utf-8'), pregunta.type, pregunta.val,respuesta.respuesta.encode('utf-8'),'0'])
                else:
                    raise PermissionDenied

    return response

@role_required(role='profesor')
@login_required
def descarga_todas_tareas(request,slug,id):
    import csv
    import StringIO
    import zipfile
    from tarea.models import Tarea,Pregunta

    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    tareas = Tarea.objects.filter(actividades__id=id,actividades__asignatura__slug__iexact=slug,realizado=True)
    preguntas_tarea = Pregunta.objects.filter(pregunta_evaluada=None,actividad__id=id)

    # Seguridad viene sin referenciar
    if request.META.has_key( 'HTTP_REFERER' ):
        if tareas.count() == 0:
            return HttpResponseRedirect(request.META['HTTP_REFERER'])
    elif tareas.count() == 0:
        raise PermissionDenied

    # Cabecera
    response = HttpResponse(mimetype='application/zip')
    response['Content-Disposition'] = 'attachment; filename="'+tareas.all()[0].actividades.name.encode('utf-8')+'.zip"'

    # Archivo zip
    archivoZIP = zipfile.ZipFile(response,'w')   ## write zip to response

    for tarea in tareas:
        # Manejador de archivo
        archivoHandle = StringIO.StringIO()

        # Archivo CSV
        archivoCSV = csv.writer(archivoHandle,dialect='excel')
        archivoCSV.writerow(["Numero", "Pregunta", "Tipo","Valor","Respuesta","Puntuacion"])

        for pregunta in preguntas_tarea.all():
            if pregunta.realizador == tarea.user:
                if pregunta.type != 1:
                    if len(pregunta.tarea_eleccion_pregunta.all())>0:
                        eleccion = pregunta.tarea_eleccion_pregunta.all()[0]
                        archivoCSV.writerow([pregunta.nr, pregunta.text.encode('utf-8'), pregunta.type, pregunta.val,eleccion.name.encode('utf-8'),eleccion.val])
                else:
                    if pregunta.tarea_respuesta_pregunta.all():
                        if len(pregunta.tarea_respuesta_pregunta.all())>0:
                            respuesta = pregunta.tarea_respuesta_pregunta.all()[0]
                            archivoCSV.writerow([pregunta.nr, pregunta.text.encode('utf-8'), pregunta.type, pregunta.val,respuesta.respuesta.encode('utf-8'),'0'])
                    else:
                        raise PermissionDenied


        archivoZIP.writestr(tarea.user.username+'.csv', archivoHandle.getvalue())

    for file in archivoZIP.filelist:
        file.create_system = 0    
    
    archivoZIP.close()

    return response


@role_required(role='profesor')
@login_required
def descarga_tareas_alumno(request,slug,alumno):
    import csv
    import StringIO
    import zipfile
    from tarea.models import Tarea,Pregunta

    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    tareas = Tarea.objects.filter(user__username=alumno,actividades__asignatura__slug__iexact=slug,realizado=True)

    # Seguridad viene sin referenciar
    if request.META.has_key( 'HTTP_REFERER' ):
        if tareas.count() == 0:
            return HttpResponseRedirect(request.META['HTTP_REFERER'])
    elif tareas.count() == 0:
        raise PermissionDenied


    # Cabecera
    response = HttpResponse(mimetype='application/zip')
    response['Content-Disposition'] = 'attachment; filename="'+alumno+'-Actividades.zip"'

    # Archivo zip
    archivoZIP = zipfile.ZipFile(response,'w')   ## write zip to response

    for tarea in tareas:
        preguntas_tarea = Pregunta.objects.filter(pregunta_evaluada=None,actividad__id=tarea.actividades.id)

        # Manejador de archivo
        archivoHandle = StringIO.StringIO()

        # Archivo CSV
        archivoCSV = csv.writer(archivoHandle,dialect='excel')
        archivoCSV.writerow(["Numero", "Pregunta", "Tipo","Valor","Respuesta","Puntuacion"])

        for pregunta in preguntas_tarea.all():
            if pregunta.realizador == tarea.user:
                if pregunta.type != 1:
                    if len(pregunta.tarea_eleccion_pregunta.all())>0:
                        eleccion = pregunta.tarea_eleccion_pregunta.all()[0]
                        archivoCSV.writerow([pregunta.nr, pregunta.text.encode('utf-8'), pregunta.type, pregunta.val,eleccion.name.encode('utf-8'),eleccion.val])
                else:
                    if pregunta.tarea_respuesta_pregunta.all():
                        if len(pregunta.tarea_respuesta_pregunta.all())>0:
                            respuesta = pregunta.tarea_respuesta_pregunta.all()[0]
                            archivoCSV.writerow([pregunta.nr, pregunta.text.encode('utf-8'), pregunta.type, pregunta.val,respuesta.respuesta.encode('utf-8'),'0'])
                    else:
                        raise PermissionDenied


        archivoZIP.writestr(tarea.user.username+'.csv', archivoHandle.getvalue())

    for file in archivoZIP.filelist:
        file.create_system = 0    
    
    archivoZIP.close()

    return response