from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect
from Fost.decorator import *
import santa.travelling.models as models
import datetime, random


def homepage(request):
    if request.user.is_authenticated():
        if request.method == 'POST':
            programs = models.Program.objects.filter(
                user = request.user,
                is_user = True
            )
            if len(programs) == 0:
                program = models.Program()
                program.initialise(request, True)
                program.save()
            else:
                program = programs[0]
            configurations = models.Configuration.objects.all()
            problem = models.Problem()
            problem.initialise(
                request, program,
                configurations[random.randint(0, len(configurations) - 1)]
            )
            problem.save()
            return HttpResponseRedirect('%s/' % problem.reference)
        else:
            return render_to_response('myproblems.html', dict(
                problems = models.Problem.objects.filter(
                    program__user = request.user,
                    program__is_user = True
                ).order_by('started'),
                user = request.user
            ))
    else:
        return HttpResponseRedirect('/')


def status(request, reference):
    problem = get_object_or_404(models.Problem, pk = reference)
    return render_to_response('problem.html', problem.status(request))


def i_jsonstatus(status):
    return dict(
        problem = dict(
            reference = status['problem'].reference,
            started = u'%s' % status['problem'].started,
            completed = status['problem'].completed and u'%s' % status['problem'].completed or None
        ),
        visible = [city.status() for city in status['cansee']],
        revealed = [city.status() for city in status['known']],
    )


@RESTget
def jsonstatus(request, reference):
    problem = get_object_or_404(models.Problem, pk = reference)
    return i_jsonstatus(problem.status(request))


def i_move(request, reference, direction):
    problem = get_object_or_404(models.Problem, pk = reference)
    move = models.Move.objects.filter(problem = problem).order_by('-id')[0]
    move.step(direction)
    return problem


def move(request, reference, direction):
    if  i_move(request, reference, direction).program.user != request.user:
        from django.exceptions import PermssionDenied
        raise PermissionDenied()
    return HttpResponseRedirect('..')


@RESTpost
def jsonmove(request, body, reference, direction):
    problem = i_move(request, reference, direction)
    return i_jsonstatus(problem.status(request))
