# -*- coding: utf-8 -*-

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect,HttpResponse
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404

from django.utils import simplejson

from app.models import Usuario,Asignatura
from app.deco import role_required
from app.views import get_info
from tarea.models import Actividad

import os

@login_required
@role_required(role='profesor')
def index(request,slug):
    from tarea.models import Actividad
    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    actividad = Actividad.objects.filter(autor=profile.user,asignatura__slug__iexact=slug)
    return render_to_response('tarea/%s/indice.html'% request.user.usuario.rol,{'actividad':actividad,'informacion':k_info},context_instance = RequestContext(request))


@login_required
def ver_tareas(request,slug):
    from tarea.models import Tarea
    import datetime
    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    tarea = Tarea.objects.filter(user=profile.user,actividades__asignatura__slug__iexact=slug,realizado=False,actividades__enddate__gte=datetime.date.today())#,actividades__time__gte=datetime.datetime.now().time())
    return render_to_response('tarea/%s/tareas.html'% request.user.usuario.rol,{'tareas':tarea,'informacion':k_info},context_instance = RequestContext(request))

@login_required
def realizar_tarea(request,slug,id):
    from tarea.models import Tarea,Actividad,Pregunta
    from django.db.models import Count

    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    

    #query
    try:
        tarea = Tarea.objects.get(user=profile.user,actividades__asignatura__slug__iexact=slug,realizado=False,actividades__id__iexact=id)
        preguntas = Pregunta.objects.filter(realizador=None,actividad__asignatura__slug__iexact=slug,actividad__id__iexact=id,pregunta_evaluada=None)

        if request.method=='POST':
            if not request.is_ajax():
                respuesta = None

                # Guardamos las respuestas
                respuestas = dict(request.POST)

                for i in range(preguntas.count()):
                    if preguntas[i].type != 3 and 'hash['+ str(i+1) +']' in respuestas.keys():

                        respuesta = request.POST['hash['+ str(i+1) +']']
                        realizar_actividad_pregunta(profile,slug,int(i+1),tarea.actividades,respuesta)

                    elif preguntas[i].type == 3:
                        elecciones = preguntas[i].tarea_eleccion_pregunta.all()

                        for x in range(elecciones.count()):
                            if 'hash['+ str(i+1) +'-'+ str(elecciones[x].nr) +']' in respuestas.keys():
                                respuesta = request.POST['hash['+ str(i+1) +'-'+ str(elecciones[x].nr) +']']
                                realizar_actividad_pregunta(profile,slug,int(i+1),tarea.actividades,respuesta)

                    elif preguntas[i].type == 1:
                        respuesta = None
                        realizar_actividad_pregunta(profile,slug,int(i+1),tarea.actividades,respuesta)
         

                    if 'hash['+ str(i+1) +']' in request.FILES:
                        fileIN = request.FILES['hash['+ str(i+1) +']']
                        directory = 'media/tareas/'+ str(id) +'/'+ str(profile.user.username) + '/'
                        if not os.path.exists(directory):
                            os.makedirs(directory)
                            fileOUT = open('media/tareas/%s/%s/%s.png' %(id,profile.user.username,str(i+1)), 'wb+')
                        else:
                            fileOUT = open('media/tareas/%s/%s/%s.png' %(id,profile.user.username,str(i+1)), 'wb+')

                        for chunk in fileIN.chunks():
                            fileOUT.write(chunk)
                        fileOUT.close()
                        realizar_actividad_pregunta(profile,slug,int(i+1),tarea.actividades,'tareas/'+ str(id) +'/'+ str(profile.user.username) + '/' + str(i+1)+'.png')
                # Normal Mode

                tarea = Tarea.objects.get(user=profile.user,actividades__id__iexact=id)
                tarea.realizado = True
                tarea.save()
                return HttpResponseRedirect(reverse('app.views.ver_asignatura',args=[slug]))

                ## Debug mode
                #message = simplejson.dumps(request.POST, sort_keys=True, indent=5)
                #return HttpResponse(message, mimetype="application/json")

            else:
                return HttpResponse('Petion Ajax')
        else:
            return render_to_response('tarea/%s/actividad.html'% request.user.usuario.rol,{'tarea':tarea,'preguntas':preguntas,'informacion':k_info},context_instance = RequestContext(request))
    except Tarea.DoesNotExist:
        raise PermissionDenied

def realizar_actividad_pregunta(profile,asignatura,nr,actividad,respuesta):
    from tarea.models import Pregunta
    try:
        query = Pregunta.objects.filter(nr__iexact=nr,actividad=actividad).order_by('id')[0]
        pregunta = Pregunta.objects.get(nr__iexact=nr,actividad=actividad,realizador=profile.user,pregunta_evaluada=None)
        
        if pregunta.type == 3:
            crear_actividad_respuesta(profile,asignatura,pregunta,actividad,respuesta)
        elif pregunta.type == 6:
            crear_actividad_respuesta(profile,asignatura,pregunta,actividad,respuesta)

    except Pregunta.DoesNotExist:
        query = Pregunta.objects.filter(nr__iexact=nr,actividad=actividad,pregunta_evaluada=None).order_by('id')[0] 

        # Salva la pregunta usuario de la tarea
        pregunta = Pregunta(realizador=profile.user,nr=query.nr,text=query.text,type=query.type,actividad=query.actividad,val=query.val,pregunta_evaluada=None)
        pregunta.save()

        # Crea la respuesta relacionada con dicha pregunta
        crear_actividad_respuesta(profile,asignatura,pregunta,actividad,respuesta)

def crear_actividad_respuesta(profile,asignatura,pregunta,actividad,respuesta):
        from tarea.models import Respuesta,Eleccion,Imagen

        if pregunta.type == 1:
            respuesta_obj = Respuesta(pregunta=pregunta,respuesta=respuesta)
            respuesta_obj.save()

        elif pregunta.type == 6:
            respuesta_obj = Imagen(pregunta=pregunta,foto=respuesta)
            respuesta_obj.save()        

        elif pregunta.type == 2 or pregunta.type == 3 or pregunta.type == 4 or pregunta.type == 5:
            try: 
                eleccion = Eleccion.objects.get(pregunta__nr=pregunta.nr,pregunta__pregunta_evaluada=None,name=respuesta,pregunta__realizador=None)
                eleccion_obj = Eleccion(pregunta=pregunta,nr=eleccion.nr,name=eleccion.name,correct=eleccion.correct,val=eleccion.val)
                eleccion_obj.save()

            except Eleccion.DoesNotExist:
                print "La eleccion no existe\n"
                raise PermissionDenied
        else:
            return HttpResponse(pregunta.type, mimetype="application/json")


@login_required
def evaluar_tarea(request,slug,id):
    from cuestionario.models import Evaluacion
    from tarea.models import Tarea
    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    evaluacion = Evaluacion.objects.get(user=profile.user,tarea__id__iexact=id)
    tarea = Tarea.objects.get(user=evaluacion.tarea.user,actividades__asignatura__slug__iexact=slug,realizado=True,actividades__hide=True)
    return render_to_response('tarea/%s/evaluar_tarea.html'% request.user.usuario.rol,{'tarea':tarea,'evaluacion':evaluacion,'informacion':k_info},context_instance = RequestContext(request))

#@role_required(role='profesor')
@login_required
def ver_tarea(request,slug,id,alumno):
    from tarea.models import Tarea,Pregunta
    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)
    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)

    return render_to_response('tarea/%s/ver_tarea.html'% request.user.usuario.rol,{'tarea':tarea,'preguntas_tarea':preguntas_tarea,'informacion':k_info},context_instance = RequestContext(request))

@role_required(role='profesor')
@login_required
def ver_actividades_alumnos(request,slug,actividad):
    from tarea.models import Tarea

    profile = request.user.get_profile()
    k_info = get_info(request,profile,slug)

    tareas = Tarea.objects.filter(actividades__asignatura__slug=slug,actividades__autor=profile.user,actividades__id__iexact=actividad,realizado=True)

    return render_to_response('tarea/%s/listado_actividades.html'% request.user.usuario.rol,{'tareas':tareas,'informacion':k_info},context_instance = RequestContext(request))


