# Python imports
import json

# Django imports
from django.shortcuts import render_to_response, render, redirect
from django.template import RequestContext
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.core.exceptions import ObjectDoesNotExist


# LeakLess Monitor imports
from Applications.Devices.Production.forms import production_form, STATUS_CHOICE
from Applications.Users.views import user_get_language
from Applications.Measure.Plot.Annotations.views import annotations_get_icon_list
from Applications.Devices.models import Lldevicelist, LldeviceProduction
from Applications.Devices.views import devices_return_by_id
from Applications.Users.views import *


def production_view(request):
    if request.user.is_authenticated():

        device_list=Lldevicelist.objects.filter(loc_active=1)
        devices_treeview=[]

        user_device_type=user_get_device(request)
        user_information=user_get_information(request)

        for device in device_list:
            if request.user.has_perm("DeviceList."+str(device.id)):
                # Formirati treeview
                devices_treeview.append(production_return_device_node(device))


        return render_to_response('production.html',{   'user_object'           : request.user,
                                                        'user_info'             : user_information,
                                                        'user_device_type'      : user_device_type,
                                                        'devices_treeview'      : json.dumps(devices_treeview),
                                                        'lang'                  : user_get_language(request)},  RequestContext(request))
    else:
        return redirect('/leakless-monitor')


def production_return_device_node(device):
    device_id = str(device.id)
    device_identifier="Unknown"
    if device.rem_identifier is not None:
        device_identifier=device.rem_identifier

    if device.loc_type == 'PDL-AG':
        return_data={
            'text'              : device_id+" ["+device_identifier+"]",
            'id'                : device_id,
            'icon'              : "glyphicon glyphicon-stop",
            'selectedIcon'      : "glyphicon glyphicon-stop",
            'showCheckbox'      : False,
            'backColor'         : "white",
            'selectable'        : True,
            'state': {
                'checked'       : True,
                'disabled'      : False,
                'expanded'      : False,
                'selected'      : False
            },
            'tags'              : [production_return_status(device)],
            'nodes'             : production_return_measurement_nodes_pdlag(device)
        }

    elif device.loc_type == 'MAG8000':
        return_data={
            'text'              : device_id+" ["+device_identifier+"]",
            'id'                : device_id,
            'icon'              : "glyphicon glyphicon-stop",
            'selectedIcon'      : "glyphicon glyphicon-stop",
            'showCheckbox'      : False,
            'backColor'         : "white",
            'selectable'        : True,
            'state': {
                'checked'       : True,
                'disabled'      : False,
                'expanded'      : False,
                'selected'      : False
            },
            'tags'              : ['N/A'],
            'nodes'             : production_return_measurement_nodes_mag8000(device)
        }
    else:
        return_data={}

    return return_data

def production_return_measurement_nodes_pdlag(device):
    return_data=[]
    node_info={
        'text'              : "Unknown",
        'icon'              : "glyphicon glyphicon-stop",
        'selectedIcon'      : "glyphicon glyphicon-stop",
        #'color'             : "#000000",
        'selectable '       : True,
        'state': {
            'checked'       : False,
            'disabled'      : False,
            'expanded'      : False,
            'selected'      : False
        },
        'tags'              : ['available']
    }

    return return_data

def production_return_measurement_nodes_mag8000(device):
    return_data=[]
    node_info={
        'text'              : "Unknown",
        'icon'              : "glyphicon glyphicon-stop",
        'selectedIcon'      : "glyphicon glyphicon-stop",
        #'color'             : "#000000",
        'selectable '       : True,
        'state': {
            'checked'       : False,
            'disabled'      : False,
            'expanded'      : False,
            'selected'      : False
        },
        'tags'              : ['available']
    }

    return return_data


def production_return_status(device):
    Return = []
    try:
        production_info = LldeviceProduction.objects.get(lldevicelist=device)
        status = production_info.status
        if status is None:
            status = 'Unknown'
        Return.append(status)
    except ObjectDoesNotExist:
        Return.append('Not present')

    return Return

def production_return_form(request):
    if request.method == 'POST':
        form = production_form(None,request.POST)

        if form.is_valid():
            device_id = form.cleaned_data['device_id']

            try:
                production_info = LldeviceProduction.objects.get(lldevicelist=device_id)
            except ObjectDoesNotExist:
                return HttpResponse('Error')

            production_info.note = form.cleaned_data['note']
            production_info.status = form.cleaned_data['status']

            production_info.save()
            return HttpResponse('Ok')


        else:
            return HttpResponse('Error')
    else:
        # Ovdje je dohvat iz baze'
        device_id = request.GET.get('device_id')

        device = devices_return_by_id(device_id)

        try:
            production_info = LldeviceProduction.objects.get(lldevicelist=device)
        except ObjectDoesNotExist:
            production_info = LldeviceProduction(lldevicelist=device)
            production_info.save()

        form = production_form(production_info)

        return render_to_response(
            'deviceProductionForm.html',{   'form'              : form,
                                            'lang'              : user_get_language(request)},
            context_instance=RequestContext(request)
        )
