# Create your views here.

from jsonrpc import *
from djangowanted.wanted.models import Item, Flag, FlagType, Page
from django.template import loader
from django.shortcuts import render_to_response
from django.template import RequestContext, Template
from django.http import HttpResponseRedirect, HttpResponse
import urllib
from copy import copy

from wanted.forms import ItemForm

formsservice = FormProcessor({'itemform': ItemForm})

service = JSONRPCService()

def index(request, path=None):
    path = request.GET.get('page', None)
    if path == '':
        path = 'index'
    if path is None:
        # workaround in history tokens: must have a query
        return HttpResponseRedirect("./?page=#index")
    try:
        p = Page.objects.get(name=path)
    except Page.DoesNotExist:
        p = None
    if not p and path == 'index':
        return render_to_response('index.html', {'title':'', 'noscript':''})
    args = {'title': p.name,
            'noscript': p.text
            }
    context_instance=RequestContext(request)
    context_instance.autoescape=False
    try:
        template = Item.objects.get(name='index.html')
    except Item.DoesNotExist:
        template = None
    if not template:
        return render_to_response('index.html', args, context_instance)
    tpl = loader.get_template_from_string(template)
    context_instance.update(args)
    tpl = tpl.render(context_instance)
    return HttpResponse(tpl)


def _getItem (item):
    fields = copy(item._meta.get_all_field_names())
    del fields[fields.index('flag')]
    del fields[fields.index('id')]
    for f in FlagType.objects.all():
        fields.append(f.name)
        try:
            fg = Flag.objects.get(item=item.id, type=f.id)
        except Flag.DoesNotExist:
            fg = Flag()
        setattr(item, f.name, fg)
    return json_convert([item], fields=fields)[0]

@jsonremote(service)
def getItem (request, num):
    try:
        item = Item.objects.get(id=num)
    except Item.DoesNotExist:
        return None
    return _getItem(item)

@jsonremote(service)
def getItemsByName (request, name):
    return json_convert([Item.objects.filter(name=name)])

@jsonremote(service)
def getItems (request):
    return json_convert(Item.objects.all())

@jsonremote(service)
def updateItem (request, item):
    t = Item.objects.get(id=item['id'])
    t.name = item['name']
    t.text = item['text']
    t.save()
    return getItems(request)

@jsonremote(service)
def addItem (request, item):
    t = Item()
    t.name = item['name']
    t.short_description = item['short_description']
    t.price = item['price']
    t.save()
    fields = copy(t._meta.get_all_field_names())
    del fields[fields.index('flag')]
    del fields[fields.index('id')]
    for f in FlagType.objects.all():
        fields.append(f.name)
        fv = item[f.name]
        d = {'item': t.id, 'type': f.id, 'value': fv}
        try:
            fg = Flag.objects.get(item=t.id, type=f.id)
        except Flag.DoesNotExist:
            fg = Flag()
            fg.item = t
            fg.type = f
        fg.value = fv
        fg.save()
        setattr(t, f.name, fg)
    return json_convert([t], fields=fields)[0]

@jsonremote(service)
def deleteItem (request, num):
    t = Item.objects.get(id=num)
    t.delete()
    return num

