from models import Module, ModuleTab
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from ox.django.shortcuts import render_to_json_response


def main(request, module_slug):
    m = get_object_or_404(Module, slug=module_slug)
    tabs = m.moduletab_set.all().order_by('order')
    default_tab = tabs[0]
    try:
        formStr = default_tab.model_class().add_form        
        has_add = True
        add_form_class = default_tab.model_class().get_add_form()
        add_form = add_form_class()	
    except:
        add_form = None
        has_add = False

    list_options = {} #get some options as GET params, etc. to potentially pass to get_list
    default_tab_list = default_tab.model_class().get_list(list_options)
    context = RequestContext(request, {
        'title': m.title,
        'about': m.about,
        'has_add': has_add,
        'add_form': add_form,
        'default_tab': tabs[0],
        'default_list': default_tab_list,
        'default_sorts': default_tab.get_dict()['sorts'],
        'tabs': tabs[1:]
    })
    return render_to_response("noel/insidepage.html", context)


def get_tab(request):
    tab_slug = request.GET.get("tab", "")
    tab = get_object_or_404(ModuleTab, slug=tab_slug)
    return render_to_json_response(tab.get_dict())
           


def get_list(request):
    tab_slug = request.GET.get("tab", "")
    tab = get_object_or_404(ModuleTab, slug=tab_slug)
    object_id = request.GET.get("object_id", False)
    sortString = request.GET.get("sort", "")
    if sortString == "" or sortString == 'null':
        sortArray = []
    else:
        sortOperator = sortString[0]
        sortField = sortString[1:]
        sortArray = [{
            'operator': sortOperator,
            'key': sortField
        }]

    list_options = {
        'search': request.GET.get("search", ""),
        'sort': sortArray, 
        'page': request.GET.get("page", 1),
        'object_id': object_id,
        'count': request.GET.get("count", 15) #FIXME: make list_length either in settings.py or config per model
    }
    object_list = tab.get_list(list_options)
    return render_to_json_response(object_list)


def get_details(request):
    tab_slug = request.GET.get("tab", '')
    tab = get_object_or_404(ModuleTab, slug=tab_slug)
    model_class = tab.model_class()
    object_id = request.GET.get("object_id", 0)
    obj = get_object_or_404(model_class, pk=object_id)
    return render_to_json_response(obj.insidepage_dict())


