# Create your views here.
from django.shortcuts import redirect, render, get_object_or_404

# from apps.main.models import Experiment, Configuration
from apps.main.views import sidebar

from .models import DDSConfiguration
from .forms import DDSConfigurationForm
# Create your views here.

def dds_conf(request, id_conf):

    conf = get_object_or_404(DDSConfiguration, pk=id_conf)
    
    kwargs = {}
    
    kwargs['status'] = conf.device.get_status_display()
    
#     if not kwargs['connected']:
#         messages.error(request, message=answer)
    
    kwargs['dev_conf'] = conf
    kwargs['dev_conf_keys'] = ['name',
                               'experiment',
                               'device',
                               'clock',
                               'multiplier',
                               'frequencyA_Mhz',
                                'frequencyA',
                                'frequencyB_Mhz',
                                'frequencyB',
                                'phaseA_degrees',
                                'phaseB_degrees',
                                'modulation',
                                'amplitude_enabled',
                                'amplitudeI',
                                'amplitudeQ']
    
    kwargs['title'] = 'DDS Configuration'
    kwargs['suptitle'] = 'Details'
    
    kwargs['button'] = 'Edit Configuration'
    
    ###### SIDEBAR ######
    kwargs.update(sidebar(conf))
    
    return render(request, 'dds_conf.html', kwargs)
    
def dds_conf_edit(request, id_conf):
    
    conf = get_object_or_404(DDSConfiguration, pk=id_conf)
    
    if request.method=='GET':
        form = DDSConfigurationForm(instance=conf)
        
    if request.method=='POST':
        form = DDSConfigurationForm(request.POST, instance=conf)
        
        if form.is_valid():
            conf = form.save(commit=False)
            
            if conf.verify_frequencies():
                
                conf.save()
                return redirect('url_dds_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, 'dds_conf_edit.html', kwargs)

# def dds_conf_import(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     if request.method == 'GET':
#         file_form = UploadFileForm()
#         
#     if request.method == 'POST':
#         file_form = UploadFileForm(request.POST, request.FILES)
#         
#         if file_form.is_valid():
#             
#             parms = files.read_dds_file(request.FILES['file'])
#         
#             if parms:
#                 
#                 if not parms['clock']:
#                     messages.warning(request, "Clock Input could not be imported from '%s'. Please fill it out." %request.FILES['file'].name)
#                 else:
#                     messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
#                 
#                 form = DDSConfigurationForm(initial=parms, instance=conf)
#                 
#                 kwargs = {}
#                 kwargs['id_dev'] = conf.id
#                 kwargs['form'] = form
#                 kwargs['title'] = 'Device Configuration'
#                 kwargs['suptitle'] = 'Parameters imported'
#                 kwargs['button'] = 'Save'
#                 kwargs['action'] = conf.get_absolute_url_edit()
#                 kwargs['previous'] = conf.get_absolute_url()
#                 
#                 ###### SIDEBAR ######
#                 kwargs.update(sidebar(conf))
#                 
#                 return render(request, 'dds_conf_edit.html', kwargs)
# 
#         messages.error(request, "Could not import parameters from file")
#     
#     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, 'dds_conf_import.html', kwargs)
# 
# def dds_conf_export(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     response = HttpResponse(content_type='text/plain')
#     response['Content-Disposition'] = 'attachment; filename="%s.dds"' %conf.name
#     response.write(conf.export_parms_to_dict())
#     
#     return response
# 
# def dds_conf_start(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     if conf.start_device():
#         messages.success(request, conf.message)
#     else:
#         messages.error(request, conf.message)
#         
#     return redirect('url_dds_conf', id_conf=conf.id)
# 
# def dds_conf_stop(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     if conf.stop_device():
#         messages.success(request, conf.message)
#     else:
#         messages.error(request, conf.message)
#     
#     return redirect('url_dds_conf', id_conf=conf.id)
# 
# def dds_conf_status(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     if conf.status_device():
#         messages.success(request, conf.message)
#     else:
#         messages.error(request, conf.message)
#     
#     return redirect('url_dds_conf', id_conf=conf.id)
# 
# 
# def dds_conf_write(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     answer = conf.write_device()
#     
#     if answer:
#         messages.success(request, conf.message)
#         
#         conf.pk = None
#         conf.id = None
#         conf.type = 1
#         conf.template = 0
#         conf.save()
#         
#     else:
#         messages.error(request, conf.message)
#     
#     return redirect('url_dds_conf', id_conf=id_conf)
# 
# def dds_conf_read(request, id_conf):
#     
#     conf = get_object_or_404(DDSConfiguration, pk=id_conf)
#     
#     if request.method=='GET':
#         
#         parms = conf.read_device()
#         
#         if not parms:
#             messages.error(request, conf.message)
#             return redirect('url_dds_conf', id_conf=conf.id)
#     
#         messages.warning(request, "Clock Input cannot be read from device. Please fill it out.")
#         
#         form = DDSConfigurationForm(initial=parms, instance=conf)
#     
#     if request.method=='POST':
#         form = DDSConfigurationForm(request.POST, instance=conf)
#         
#         if form.is_valid():
#             dds_model = form.save(commit=False)
#             
#             if dds_model.verify_frequencies():
#                 
#                 dds_model.save()
#                 return redirect('url_dds_conf', id_conf=conf.id)
#         
#         messages.error(request, "DDS parameters could not be saved")
#         
#     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, 'dds_conf_edit.html', kwargs)