# Python imports
import time
import json

# Django imports
from django.shortcuts import render_to_response, render, redirect
from django.http import HttpResponse
from django.http import JsonResponse

# LeakLess monitor imports
from Applications.Devices.models import *
from Applications.Measure.views import *
from Applications.Devices.Configuration.views import *
from Applications.Devices.views import *
from Applications.Users.views import *
from Applications.Measure.models import *

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

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

        for device in device_list:
            if request.user.has_perm("DeviceList." + str(device.id)):
                devices_treeview.append(alarm_profiles_return_device_node(device))

        user_information = user_get_information(request)
        user_device_type = user_get_device(request)
        return render_to_response('alarm_profiles.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 HttpResponse('Invalid user')




def alarm_profiles_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+"]",
            'icon'              : "glyphicon glyphicon-stop",
            'selectedIcon'      : "glyphicon glyphicon-stop",
            'showCheckbox'      : False,
            #'color'             : "#000000",
            'backColor'         : "white",
            #'href'             : "#node-1",
            'selectable'        : True,
            'device_node'       : True,
            'state': {
                'checked'       : False,
                'disabled'      : False,
                'expanded'      : False,
                'selected'      : False
            },
            'device_id'         : device_id,
            #'tags'              : [device_identifier],
            'nodes'             : alarm_profiles_return_profile_nodes_pdlag(device_id,device_identifier)
        }

        # TODO: provjeriti firmware uredaja
        firmware_info=devices_return_firmware(device_id)
        if firmware_info is not None:
            if 'AP' not in firmware_info:
                return_data['tags']=['N/A']
                return_data['nodes']=[]
        else:
            return_data['tags']=['N/A']

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

    return return_data

def alarm_profiles_return_profile_nodes_pdlag(device_id,device_identifier):
    return_data=[]
    node_info={
        'text'              : "Unknown",
        'icon'              : "glyphicon glyphicon-stop",
        'selectedIcon'      : "glyphicon glyphicon-stop",
        'showCheckbox'      : False,
        'selectable '       : True,
        'device_node'       : False,
        'state': {
            'checked'       : False,
            'disabled'      : False,
            'expanded'      : False,
            'selected'      : False
        },
        'tags'              : ['available'],
        'device_id'         : device_id,
        'device_identifier' : device_identifier
    }

    try:
        alarm_profiles = LldevicePdlagAlarmProfile.objects.get(lldevicelist=device_id)
    except ObjectDoesNotExist:
        return return_data

    # profile 0
    node_info_ap0=node_info.copy()

    profile=alarm_profiles.rem_ap0
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap0.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap0.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap0['text'] = 'Profile 0 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap0['text'] = 'Profile 0 ['+profile_name_loc+']'

    node_info_ap0['value_rem'] = alarm_profiles.rem_ap0
    node_info_ap0['value_loc'] = alarm_profiles.loc_ap0
    node_info_ap0['number'] = 0

    if alarm_profiles.rem_ap0 is None or alarm_profiles.loc_ap0 is None:
        node_info_ap0['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap0 != alarm_profiles.loc_ap0:
        node_info_ap0['tags'] = ['Changed']
    else:
        node_info_ap0['tags'] = ['Synced']

    return_data.append(node_info_ap0)

    # profile 1
    node_info_ap1=node_info.copy()

    profile=alarm_profiles.rem_ap1
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap1.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap1.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap1['text'] = 'Profile 1 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap1['text'] = 'Profile 1 ['+profile_name_loc+']'

    node_info_ap1['value_rem'] = alarm_profiles.rem_ap1
    node_info_ap1['value_loc'] = alarm_profiles.loc_ap1
    node_info_ap1['number'] = 1

    if alarm_profiles.rem_ap1 is None or alarm_profiles.loc_ap1 is None:
        node_info_ap1['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap1 != alarm_profiles.loc_ap1:
        node_info_ap1['tags'] = ['Changed']
    else:
        node_info_ap1['tags'] = ['Synced']

    return_data.append(node_info_ap1)

    # profile 2
    node_info_ap2=node_info.copy()

    profile=alarm_profiles.rem_ap2
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap2.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap2.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap2['text'] = 'Profile 2 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap2['text'] = 'Profile 2 ['+profile_name_loc+']'
    node_info_ap2['value_rem'] = alarm_profiles.rem_ap2
    node_info_ap2['value_loc'] = alarm_profiles.loc_ap2
    node_info_ap2['number'] = 2

    if alarm_profiles.rem_ap2 is None or alarm_profiles.loc_ap2 is None:
        node_info_ap2['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap2 != alarm_profiles.loc_ap2:
        node_info_ap2['tags'] = ['Changed']
    else:
        node_info_ap2['tags'] = ['Synced']

    return_data.append(node_info_ap2)


    # profile 3
    node_info_ap3=node_info.copy()

    profile=alarm_profiles.rem_ap3
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap3.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap3.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap3['text'] = 'Profile 3 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap3['text'] = 'Profile 3 ['+profile_name_loc+']'
    node_info_ap3['value_rem'] = alarm_profiles.rem_ap3
    node_info_ap3['value_loc'] = alarm_profiles.loc_ap3
    node_info_ap3['number'] = 3

    if alarm_profiles.rem_ap3 is None or alarm_profiles.loc_ap3 is None:
        node_info_ap3['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap3 != alarm_profiles.loc_ap3:
        node_info_ap3['tags'] = ['Changed']
    else:
        node_info_ap3['tags'] = ['Synced']

    return_data.append(node_info_ap3)

    # profile 4
    node_info_ap4=node_info.copy()

    profile=alarm_profiles.loc_ap4
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap4.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap4.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap4['text'] = 'Profile 4 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap4['text'] = 'Profile 4 ['+profile_name_loc+']'
    node_info_ap4['value_rem'] = alarm_profiles.rem_ap4
    node_info_ap4['value_loc'] = alarm_profiles.loc_ap4
    node_info_ap4['number'] = 4

    if alarm_profiles.rem_ap4 is None or alarm_profiles.loc_ap4 is None:
        node_info_ap4['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap4 != alarm_profiles.loc_ap4:
        node_info_ap4['tags'] = ['Changed']
    else:
        node_info_ap4['tags'] = ['Synced']

    return_data.append(node_info_ap4)

    # profile 5
    node_info_ap5=node_info.copy()

    profile=alarm_profiles.rem_ap5
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap5.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap5.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap5['text'] = 'Profile 5 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap5['text'] = 'Profile 5 ['+profile_name_loc+']'
    node_info_ap5['value_rem'] = alarm_profiles.rem_ap5
    node_info_ap5['value_loc'] = alarm_profiles.loc_ap5
    node_info_ap5['number'] = 5

    if alarm_profiles.rem_ap5 is None or alarm_profiles.loc_ap5 is None:
        node_info_ap5['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap5 != alarm_profiles.loc_ap5:
        node_info_ap5['tags'] = ['Changed']
    else:
        node_info_ap5['tags'] = ['Synced']

    return_data.append(node_info_ap5)

    # profile 6
    node_info_ap6=node_info.copy()

    profile=alarm_profiles.rem_ap6
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap6.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap6.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap6['text'] = 'Profile 6 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap6['text'] = 'Profile 6 ['+profile_name_loc+']'
    node_info_ap6['value_rem'] = alarm_profiles.rem_ap6
    node_info_ap6['value_loc'] = alarm_profiles.loc_ap6
    node_info_ap6['number'] = 6

    if alarm_profiles.rem_ap6 is None or alarm_profiles.loc_ap6 is None:
        node_info_ap6['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap6 != alarm_profiles.loc_ap6:
        node_info_ap6['tags'] = ['Changed']
    else:
        node_info_ap6['tags'] = ['Synced']

    return_data.append(node_info_ap6)

    # profile 7
    node_info_ap7=node_info.copy()

    profile=alarm_profiles.rem_ap7
    profile_name_loc='?'
    profile_name_rem='?'
    if profile is not None :
        profile_name_rem = alarm_profiles.rem_ap7.split(';')[0]
        profile_name_loc = alarm_profiles.loc_ap7.split(';')[0]

    if profile_name_rem != profile_name_loc:
        node_info_ap7['text'] = 'Profile 7 ['+profile_name_rem+'->'+profile_name_loc+']'
    else:
        node_info_ap7['text'] = 'Profile 7 ['+profile_name_loc+']'
    node_info_ap7['value_rem'] = alarm_profiles.rem_ap7
    node_info_ap7['value_loc'] = alarm_profiles.loc_ap7
    node_info_ap7['number'] = 7

    if alarm_profiles.rem_ap7 is None or alarm_profiles.loc_ap7 is None:
        node_info_ap7['tags'] = ['Unknown']
    elif alarm_profiles.rem_ap7 != alarm_profiles.loc_ap7:
        node_info_ap7['tags'] = ['Changed']
    else:
        node_info_ap7['tags'] = ['Synced']

    return_data.append(node_info_ap7)

    return return_data

def alarm_profiles_return_profile_nodes_mag8000(device_id,device_identifier):
    return_data=[]
    return return_data

def alarm_profiles_return_data(request):
    if request.user.is_authenticated():
        if request.is_ajax():
            if request.method == 'POST':
                return_data =json.loads(request.body)
                data_available = False
                data_date     = datetime.strptime(return_data['date'], "%Y-%m-%d").date()
                device_id     = return_data['device_id']
                if device_id is None:
                    data_response = { 'ok': False , 'data_available': data_available}
                    return JsonResponse(data_response)

                time_start = datetime(data_date.year, data_date.month, data_date.day, 0, 0, 0)
                time_end = datetime(data_date.year, data_date.month, data_date.day, 23, 59, 59)

                measurement_list = LldevicePdlagMeasure.objects.filter(
                        timestamp__gt=time_start, timestamp__lte=time_end,
                        lldevicelist=device_id).order_by('timestamp')

                time_data           = []
                pressure_data_ch1   = []
                pressure_data_ch2   = []
                pressure_unit       = measure_return_pressure_unit_string(device_id)
                flow_data_ch1       = []
                flow_data_ch2       = []
                flow_unit           = measure_return_flow_unit_string(device_id)


                for measure in measurement_list:
                    data_available = True
                    time_data.append(str(measure.timestamp).replace("-", "/"))
                    pressure_data_ch1.append(check_is_none(measure.ch1_pressure) )
                    pressure_data_ch2.append(check_is_none(measure.ch2_pressure) )
                    flow_data_ch1.append(check_is_none(measure.ch1_flow) )
                    flow_data_ch2.append(check_is_none(measure.ch2_flow) )


                data_response = {
                    'ok'                : True,
                    'data_available'    : data_available,
                    'device_id'         : device_id,
                    'time_data'         : time_data,
                    'pressure_unit'     : pressure_unit,
                    'pressure_data_ch1' : pressure_data_ch1,
                    'pressure_data_ch2' : pressure_data_ch2,
                    'flow_unit'         : flow_unit,
                    'flow_data_ch1'     : flow_data_ch1,
                    'flow_data_ch2'     : flow_data_ch2
                }

                return JsonResponse(data_response)

            else:
                return_data =json.loads(request.GET)

    else:
        return HttpResponse('Invalid user')


def alarm_profiles_return_alarm_parameters(request):
    if request.user.is_authenticated():
        device_id           = request.GET.get('device_id')
        device_identifier   = request.GET.get('device_identifier')

        device_parameters=LldevicePdlagParameters.objects.filter(lldevicelist=device_id)

        if len(device_parameters)!=1:
            return HttpResponse("Parameters not fetched!")


        parameter_info=LldevicePdlagParameterinfo.objects.filter(visible__gte=1)

        param_list_pressure1    = configuration_return_parameter_data(device_parameters[0], parameter_info, "ALARM_CH1P")
        wpch1p_loc              = '{0:08X}'.format(check_is_none(device_parameters[0].loc_app1))
        wpch1p_rem              = '{0:08X}'.format(check_is_none(device_parameters[0].rem_app1))
        param_list_pressure2    = configuration_return_parameter_data(device_parameters[0], parameter_info, "ALARM_CH2P")
        wpch2p_loc              = '{0:08X}'.format(check_is_none(device_parameters[0].loc_app2))
        wpch2p_rem              = '{0:08X}'.format(check_is_none(device_parameters[0].rem_app2))
        param_list_flow1        = configuration_return_parameter_data(device_parameters[0], parameter_info, "ALARM_CH1F")
        wpch1f_loc              = '{0:08X}'.format(check_is_none(device_parameters[0].loc_apf1))
        wpch1f_rem              = '{0:08X}'.format(check_is_none(device_parameters[0].rem_apf1))
        param_list_flow2        = configuration_return_parameter_data(device_parameters[0], parameter_info, "ALARM_CH2F")
        wpch2f_loc              = '{0:08X}'.format(check_is_none(device_parameters[0].loc_apf2))
        wpch2f_rem              = '{0:08X}'.format(check_is_none(device_parameters[0].rem_apf2))
        param_list_digital1     = configuration_return_parameter_data(device_parameters[0], parameter_info, "ALARM_CH1D")
        param_list_digital2     = configuration_return_parameter_data(device_parameters[0], parameter_info, "ALARM_CH2D")

        user_device_type                = user_get_device(request)

        alarm_day_list      = ['None', 'AP0', 'AP1','AP2','AP3','AP4','AP5','AP6','AP7']
        alarm_day_values_ch1p_loc    = {'mon': return_alarm_val(wpch1p_loc[7]), 'tue': return_alarm_val(wpch1p_loc[6]),
                                        'wed': return_alarm_val(wpch1p_loc[5]), 'thu': return_alarm_val(wpch1p_loc[4]),
                                        'fri': return_alarm_val(wpch1p_loc[3]), 'sat': return_alarm_val(wpch1p_loc[2]),
                                        'sun': return_alarm_val(wpch1p_loc[1]) }
        alarm_day_values_ch1p_rem    = {'mon': return_alarm_val(wpch1p_rem[7]), 'tue': return_alarm_val(wpch1p_rem[6]),
                                        'wed': return_alarm_val(wpch1p_rem[5]), 'thu': return_alarm_val(wpch1p_rem[4]),
                                        'fri': return_alarm_val(wpch1p_rem[3]), 'sat': return_alarm_val(wpch1p_rem[2]),
                                        'sun': return_alarm_val(wpch1p_rem[1]) }
        alarm_day_values_ch2p_loc    = {'mon': return_alarm_val(wpch2p_loc[7]), 'tue': return_alarm_val(wpch2p_loc[6]),
                                        'wed': return_alarm_val(wpch2p_loc[5]), 'thu': return_alarm_val(wpch2p_loc[4]),
                                        'fri': return_alarm_val(wpch2p_loc[3]), 'sat': return_alarm_val(wpch2p_loc[2]),
                                        'sun': return_alarm_val(wpch2p_loc[1]) }
        alarm_day_values_ch2p_rem    = {'mon': return_alarm_val(wpch2p_rem[7]), 'tue': return_alarm_val(wpch2p_rem[6]),
                                        'wed': return_alarm_val(wpch2p_rem[5]), 'thu': return_alarm_val(wpch2p_rem[4]),
                                        'fri': return_alarm_val(wpch2p_rem[3]), 'sat': return_alarm_val(wpch2p_rem[2]),
                                        'sun': return_alarm_val(wpch2p_rem[1]) }
        alarm_day_values_ch1f_loc    = {'mon': return_alarm_val(wpch1f_loc[7]), 'tue': return_alarm_val(wpch1f_loc[6]),
                                        'wed': return_alarm_val(wpch1f_loc[5]), 'thu': return_alarm_val(wpch1f_loc[4]),
                                        'fri': return_alarm_val(wpch1f_loc[3]), 'sat': return_alarm_val(wpch1f_loc[2]),
                                        'sun': return_alarm_val(wpch1f_loc[1]) }
        alarm_day_values_ch1f_rem    = {'mon': return_alarm_val(wpch1f_rem[7]), 'tue': return_alarm_val(wpch1f_rem[6]),
                                        'wed': return_alarm_val(wpch1f_rem[5]), 'thu': return_alarm_val(wpch1f_rem[4]),
                                        'fri': return_alarm_val(wpch1f_rem[3]), 'sat': return_alarm_val(wpch1f_rem[2]),
                                        'sun': return_alarm_val(wpch1f_rem[1]) }
        alarm_day_values_ch2f_loc    = {'mon': return_alarm_val(wpch2f_loc[7]), 'tue': return_alarm_val(wpch2f_loc[6]),
                                        'wed': return_alarm_val(wpch2f_loc[5]), 'thu': return_alarm_val(wpch2f_loc[4]),
                                        'fri': return_alarm_val(wpch2f_loc[3]), 'sat': return_alarm_val(wpch2f_loc[2]),
                                        'sun': return_alarm_val(wpch2f_loc[1]) }
        alarm_day_values_ch2f_rem    = {'mon': return_alarm_val(wpch2f_rem[7]), 'tue': return_alarm_val(wpch2f_rem[6]),
                                        'wed': return_alarm_val(wpch2f_rem[5]), 'thu': return_alarm_val(wpch2f_rem[4]),
                                        'fri': return_alarm_val(wpch2f_rem[3]), 'sat': return_alarm_val(wpch2f_rem[2]),
                                        'sun': return_alarm_val(wpch2f_rem[1]) }



        return render_to_response('alarm_configuration.html',{  'user_object'                       : request.user,
                                                                'user_device_type'                  : user_device_type,
                                                                'device_id'                         : device_id,
                                                                'device_identifier'                 : device_identifier,
                                                                'alarm_day_list'                    : alarm_day_list,
                                                                'alarm_day_values_ch1p_loc'         : alarm_day_values_ch1p_loc,
                                                                'alarm_day_values_ch1p_rem'         : alarm_day_values_ch1p_rem,
                                                                'alarm_day_values_ch2p_loc'         : alarm_day_values_ch2p_loc,
                                                                'alarm_day_values_ch2p_rem'         : alarm_day_values_ch2p_rem,
                                                                'alarm_day_values_ch1f_loc'         : alarm_day_values_ch1f_loc,
                                                                'alarm_day_values_ch1f_rem'         : alarm_day_values_ch1f_rem,
                                                                'alarm_day_values_ch2f_loc'         : alarm_day_values_ch2f_loc,
                                                                'alarm_day_values_ch2f_rem'         : alarm_day_values_ch2f_rem,
                                                                'param_list_pressure1'              : param_list_pressure1,
                                                                'param_list_pressure2'              : param_list_pressure2,
                                                                'param_list_flow1'                  : param_list_flow1,
                                                                'param_list_flow2'                  : param_list_flow2,
                                                                'param_list_digital1'               : param_list_digital1,
                                                                'param_list_digital2'               : param_list_digital2,
                                                                'lang'                              : user_get_language(request)})
    else:
        return redirect(reverse('login_page'))


def alarm_profiles_save_data(request):
    if request.user.is_authenticated():
        if request.is_ajax():
            if request.method == 'POST':
                return_data =json.loads(request.body)

                device_id                   = return_data['device_id']
                alarm_profile_data          = return_data['alarm_profile_data']
                alarm_profile_number        = return_data['alarm_profile_number']
                alarm_profile_resolution    = return_data['alarm_profile_resolution']
                alarm_profile_name          = return_data['alarm_profile_name']

                data_response = {'ok': True, 'text': 'Finished ok'}

                if device_id is None:
                    data_response = { 'ok': False ,  'text': 'No device id selected'}
                    return JsonResponse(data_response)

                if alarm_profile_number is None or alarm_profile_number<0 or alarm_profile_number>7:
                    data_response = { 'ok': False ,  'text': 'Wrong alarm profile number'}
                    return JsonResponse(data_response)

                if alarm_profile_resolution is None or alarm_profile_resolution < 0 or alarm_profile_resolution > 255:
                    data_response = {'ok': False, 'text': 'Wrong alarm profile resolution'}
                    return JsonResponse(data_response)

                if alarm_profile_name is None or len(alarm_profile_name) > 16 or len(alarm_profile_name) < 1:
                    data_response = {'ok': False, 'text': 'Wrong input name'}
                    return JsonResponse(data_response)

                if alarm_profile_data is None or len(alarm_profile_data) != 24*4:
                    data_response = {'ok': False, 'text': 'Wrong alarm profile data'}
                    return JsonResponse(data_response)

                field_name_alarm = 'loc_ap'+str(alarm_profile_number)
                field_value_alarm =  alarm_profile_name+';'+str(alarm_profile_resolution)+';'+alarm_profile_data.upper()

                filed_name_last_profile_change = 'lastprofilechange'
                filed_value_last_profile_change= datetime.now()


                alarm_profile_dictionary = {field_name_alarm                : field_value_alarm,
                                            filed_name_last_profile_change  : filed_value_last_profile_change}




                LldevicePdlagAlarmProfile.objects.filter(lldevicelist=device_id).update(**alarm_profile_dictionary)

                #TODO: spremiti podatke u bazu
                return JsonResponse(data_response)

            else:
                return_data =json.loads(request.GET)

    else:
        return HttpResponse('Invalid user')


def alarm_profiles_save_parameters(request):
    if request.user.is_authenticated():
        if request.is_ajax():
            if request.method == 'POST':
                return_data =json.loads(request.body)

                device_id                  = return_data['device_id']
                parameter_values           = return_data['parameter_values']
                week_value_ch1p            = return_data['week_value_ch1p']
                week_value_ch2p            = return_data['week_value_ch2p']
                week_value_ch1f            = return_data['week_value_ch1f']
                week_value_ch2f            = return_data['week_value_ch2f']

                data_response = {'ok': True, 'text': 'Finished ok'}

                if device_id is None:
                    data_response = { 'ok': False ,  'text': 'No device id selected'}
                    return JsonResponse(data_response)

                if week_value_ch1p<0 or week_value_ch1p>0xFFFFFFF or week_value_ch2p<0 or week_value_ch2p>0xFFFFFFF  or week_value_ch1f<0 or week_value_ch1f>0xFFFFFFF  or week_value_ch2f<0 or week_value_ch2f>0xFFFFFFF :
                    data_response = { 'ok': False ,  'text': 'Wrong data format'}
                    return JsonResponse(data_response)

                parameter_dictionary = {}
                error_parameter_list    = []
                success_parameter_list  = []

                fail_counter    = 0
                success_counter = 0

                parameter_info_list     = LldevicePdlagParameterinfo.objects.all()

                # Spremanje parametara
                for parameter in parameter_values:
                    parameter_name= parameter['name']
                    parameter_value= parameter['value']
                    if parameter_value is not None and parameter_name is not None:
                        try:
                            parameter_info     = parameter_info_list.get(name=parameter_name)
                        except ObjectDoesNotExist:
                            continue
                        if not (configuration_check_parameter_value(parameter_value, parameter_info)):
                            fail_counter += 1
                            error_parameter_list.append("1-" + parameter_name)
                            continue

                        d = {'loc_'+parameter_name.lower(): parameter_value}
                        parameter_dictionary.update(d)
                        success_counter += 1
                        success_parameter_list.append("1-" + parameter_name)
                    else:
                        fail_counter += 1
                        error_parameter_list.append("0-" + parameter_name)

                # Spremanje week parametara
                parameter_dictionary.update({'loc_app1': week_value_ch1p})
                parameter_dictionary.update({'loc_app2': week_value_ch2p})
                parameter_dictionary.update({'loc_apf1': week_value_ch1f})
                parameter_dictionary.update({'loc_apf2': week_value_ch2f})


                LldevicePdlagParameters.objects.filter(lldevicelist=device_id).update(**parameter_dictionary)

                if fail_counter > 0:
                    user_action_data_short = "New unit save with " + str(fail_counter) + " errors"
                    user_action_data_long = "Success: " + str(success_counter) + " Fail: " + str(
                        fail_counter) + " Params: " + ",".join(error_parameter_list)
                    user_add_new_action(request.user.username, "UNIT_SAVE", user_action_data_short, user_action_data_long, device_id)
                else:
                    user_action_data_short = "New unit save"
                    user_action_data_long = "Success: " + str(success_counter) + " Fail: " + str(
                        fail_counter) + " Params: " + ",".join(error_parameter_list)
                    user_add_new_action(request.user.username, "UNIT_SAVE", user_action_data_short, user_action_data_long, device_id)

                data_response = {'ok': True, 'text': 'Ok'}
                return JsonResponse(data_response)

            else:
                return_data =json.loads(request.GET)

    else:
        return HttpResponse('Invalid user')

def check_is_none(value):
    if value is None:
        value=0
    return value


def return_alarm_val(value):
    val =int(value, 16)
    if val>=8:
        return val-7
    elif val<8:
        return 0