from django.shortcuts import redirect, render, get_object_or_404
from django.contrib import messages
from django.http import HttpResponse

from apps.main.models import Experiment, Configuration
from .models import CGSConfiguration

from .forms import CGSConfigurationForm, UploadFileForm
from apps.main.views import sidebar

import requests
import json
#from __builtin__ import None
# Create your views here.

def cgs_conf(request, id_conf):
    
    conf = get_object_or_404(CGSConfiguration, pk=id_conf)
    
    ip=conf.device.ip_address
    port=conf.device.port_address
    
    kwargs = {}
    
    kwargs['status'] = conf.device.get_status_display()
    
    #if request.method=='GET':
        #r: response = icon, status
    #    try:
    #        route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548"
    #        r = requests.get(route)
    #        response = str(r.text)
    #        response = response.split(";")
    #        icon = response[0]
    #        status = response[-1] 
            #print r.text
            #"icon" could be: "alert" or "okay"
            # Si hay alerta pero esta conectado
    #        if "alert" in icon:
    #            if "Starting Up" in status: #No Esta conectado
    #                kwargs['connected'] = False
    #            else:
    #                kwargs['connected'] = True
    #        elif "okay" in icon:
    #            kwargs['connected'] = True
    #        else:
    #            kwargs['connected'] = False
                
    #    except:     
    #        kwargs['connected'] = False
    #        status = "The Device is not connected."
    
    #if not kwargs['connected']:
    #    messages.error(request, message=status)
    
    kwargs['dev_conf'] = conf
    kwargs['dev_conf_keys'] = ['experiment', 'device',
                               'freq0', 'freq1',
                               'freq2', 'freq3']
    
    kwargs['title'] = 'CGS Configuration'
    kwargs['suptitle'] = 'Details'
    
    kwargs['button'] = 'Edit Configuration'
    
    kwargs['no_play'] = True
    
    ###### SIDEBAR ######
    kwargs.update(sidebar(conf))
    
    return render(request, 'cgs_conf.html', kwargs)

def cgs_conf_edit(request, id_conf):
    
    conf = get_object_or_404(CGSConfiguration, pk=id_conf)
    
    if request.method=='GET':
        form = CGSConfigurationForm(instance=conf)
        
    if request.method=='POST':
        form = CGSConfigurationForm(request.POST, instance=conf)
        
        if form.is_valid():
            if conf.freq0 == None:  conf.freq0 = 0
            if conf.freq1 == None:  conf.freq1 = 0
            if conf.freq2 == None:  conf.freq2 = 0
            if conf.freq3 == None:  conf.freq3 = 0
            
            conf = form.save(commit=False)
            
            if conf.verify_frequencies():
                conf.save()
                return redirect('url_cgs_conf', id_conf=conf.id)
            
            ##ERRORS
          
    kwargs = {}
    kwargs['id_dev'] = conf.id
    kwargs['form'] = form
    kwargs['title'] = 'Device Configuration'
    kwargs['suptitle'] = 'Edit'
    kwargs['button'] = 'Save'
    
    
    ###### SIDEBAR ######
    kwargs.update(sidebar(conf))
    
    return render(request, 'cgs_conf_edit.html', kwargs)
# 
# def cgs_conf_write(request, id_conf):
#     
#     conf = get_object_or_404(CGSConfiguration, pk=id_conf)
#     ip=conf.device.ip_address
#     port=conf.device.port_address
#     
#     #Frequencies from form
#     f0 = conf.freq0
#     f1 = conf.freq1
#     f2 = conf.freq2
#     f3 = conf.freq3
#     
#     try:            
#         post_data = {"f0":f0, "f1":f1, "f2":f2, "f3":f3}
#         route = "http://" + str(ip) + ":" + str(port) + "/frequencies/"
#         r = requests.post(route, post_data)
#         text = r.text
#         text = text.split(',')
#     
#         try: 
#             if len(text)>1:
#                 title = text[0]
#                 status = text[1]
#                 status_ok = r.status_code 
#                 if title == "okay":
#                     messages.success(request, status)
#                 else:
#                     messages.error(request, status)
#                     
#             else:
#                 title = text[0]
#                 messages.error(request, title)
#             
#         except:
#             messages.error(request, "An hardware error was found.")
#             
#     except:
#         messages.error(request, "Could not write parameters.")
#     
#     
#     
#     
#     return redirect('url_cgs_conf', id_conf=conf.id)
# 
# def cgs_conf_read(request, id_conf):
#     
#     conf = get_object_or_404(CGSConfiguration, pk=id_conf)
#     
#     ip=conf.device.ip_address
#     port=conf.device.port_address
#     
#     if request.method=='POST':
#         form = CGSConfigurationForm(request.POST, instance=conf)
#         
#         if form.is_valid():
#             cgs_model = form.save(commit=False)
#             
#             if cgs_model.verify_frequencies():
#                 
#                 cgs_model.save()
#                 return redirect('url_cgs_conf', id_conf=conf.id)
#         
#         messages.error(request, "Parameters could not be saved. Invalid parameters")
#         
#         data = {}
#     
#     
#     if request.method=='GET':
#         #r: response = icon, status
#         route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548"
#         try:
#             r = requests.get(route)
#             response = str(r.text)
#             response = response.split(";")
#             icon = response[0]
#             status = response[-1] 
#             print r.text
#             #"icon" could be: "alert" or "okay"
#             if  "okay" in icon:
#                 messages.success(request, status)
#             else:
#                 messages.error(request, status)
#             #Get Frequencies
#             route = "http://" + str(ip) + ":" + str(port) + "/frequencies/"
#             #frequencies = requests.get('http://10.10.10.175:8080/frequencies/')
#             frequencies = requests.get(route)
#             frequencies = frequencies.json()
#             frequencies = frequencies.get("Frecuencias")
#             f0 = frequencies.get("f0")
#             f1 = frequencies.get("f1")
#             f2 = frequencies.get("f2")
#             f3 = frequencies.get("f3")
#             print f0,f1,f2,f3
#             
#                 
#             if not response:
#                 messages.error(request, "Could not read parameters from Device")
#                 return redirect('url_cgs_conf', id_conf=conf.id)
#     
#             data = {'experiment' : conf.experiment.id,
#                     'device' : conf.device.id,
#                     'freq0' : f0,
#                     'freq1' : f1,
#                     'freq2' : f2,
#                     'freq3' : f3,
#                     }
#         except:
#             messages.error(request, "Could not read parameters from Device") 
#             data = {'experiment' : conf.experiment.id,
#                     'device' : conf.device.id,
#                     'freq0' : None,
#                     'freq1' : None,
#                     'freq2' : None,
#                     'freq3' : None,
#                     }
#             return redirect('url_cgs_conf', id_conf=conf.id)
#     
#         form = CGSConfigurationForm(initial = data)
#     
#     kwargs = {}
#     kwargs['id_dev'] = conf.id
#     kwargs['form'] = form
#     kwargs['title'] = 'Device Configuration'
#     kwargs['suptitle'] = 'Parameters read from device'
#     kwargs['button'] = 'Save'
#     
#     ###### SIDEBAR ######
#     kwargs.update(sidebar(conf))
#     
#     return render(request, 'cgs_conf_edit.html', kwargs)
# 
# def cgs_conf_import(request, id_conf):
#     
#     conf = get_object_or_404(CGSConfiguration, pk=id_conf)
#     
#     if request.method == 'POST':
#         file_form = UploadFileForm(request.POST, request.FILES)
#                 
#         if file_form.is_valid():
#             
#             try:
#                 if conf.update_from_file(request.FILES['file']):
#                 
#                     try:
#                         conf.full_clean()
#                     except ValidationError as e:
#                         messages.error(request, e)
#                     else:
#                         conf.save()
#                         
#                         messages.success(request, "Parameters imported from file: '%s'." %request.FILES['file'].name)
#                         #messages.warning(request,"")
#                         return redirect('url_cgs_conf', id_conf=conf.id)
#             except:
#                 messages.error(request, "No JSON object could be decoded.")
#                 
#         messages.error(request, "Could not import parameters from file")
#         
#     else:
#         file_form = UploadFileForm(initial={'title': '.json'})
#         
#     
#     kwargs = {}
#     kwargs['id_dev'] = conf.id
#     kwargs['title'] = 'Device Configuration'
#     kwargs['form'] = file_form
#     kwargs['suptitle'] = 'Importing file'
#     kwargs['button'] = 'Import'
#     
#     kwargs.update(sidebar(conf))
#     
#     return render(request, 'cgs_conf_import.html', kwargs)
# 
# def handle_uploaded_file(f):
#     
#     data = {'freq0' : 62500000,
#             'freq1' : 62500000,
#             'freq2' : 62500000,
#             'freq3' : 62500000,
#             }
#         
#     return data
# 
# def cgs_conf_export(request, id_conf):
#     
#     conf = get_object_or_404(CGSConfiguration, pk=id_conf)
#     ip=conf.device.ip_address
#     port=conf.device.port_address
#     
#     #if request.method=='GET':
#     #    data = {"Frequencies": [
#     #                ["freq0", conf.freq0],
#     #                ["freq1", conf.freq1],
#     #                ["freq2", conf.freq2],
#     #                ["freq3", conf.freq3]
#     #           ]}
#     #    json_data = json.dumps(data)
#     #    conf.parameters = json_data
#     #    response = HttpResponse(conf.parameters, content_type="application/json")
#     #    response['Content-Disposition'] = 'attachment; filename="data.json"'
#                 
#     #    return response
#     
#     kwargs = {}
#     kwargs['dev_conf'] = conf
#     kwargs['dev_conf_keys'] = ['experiment', 'device',
#                                'freq0', 'freq1',
#                                'freq2', 'freq3']
#     
#     kwargs['title'] = 'CGS Configuration'
#     kwargs['suptitle'] = 'Details'
#     
#     kwargs['button'] = 'Edit Configuration'
#     
#     ###### SIDEBAR ######
#     kwargs.update(sidebar(conf))
#     return render(request, 'cgs_conf.html', kwargs)