# datascience/views.py

from django.shortcuts import render
from django.views.generic import TemplateView
from datetime import datetime
# Funcionnes importadas de utils
from .utils.tarifaselectricas.tarifaselectricas import TarifaHora
from .utils.turismo import turismo as tur
from .utils.transporteaereo import transporteaereo as ta
from .utils.seguridadsocial import seguridadsocial as ss

# specific to this view
from django.views.generic import ListView

# Importar todos los modelos y forms de bd
from .models import *
from .forms import *
from django.forms import modelformset_factory
import ast

# Variables GLOBALES
BASEDATOS = '/var/www/html/lartica/db.sqlite3' # Produccion
#BASEDATOS = '/home/ja/Documentos/test/lartica/db.sqlite3' # Desarrollo


# Create your views here.

class HomeView(TemplateView):
    template_name = 'datascience/home.html'
    
def index(request):
    context = {}
    context.update(title='Lartica')
    context.update(site_title='Data Science')
    return render(request, 'datascience/index.html', context)

def tarifaselectricas(request):
    """ Tarifas electricas del día por horas """
    context = {}
    #context.update(title='Valle Tera')
    #context.update(site_title='Tarifas Electricas')
    now = datetime.now()
    tarifas = TarifaHora(now)[0]
    maximo = TarifaHora(now)[1]
    minimo = TarifaHora(now)[2]
    ahora = TarifaHora(now)[3]
    labels = TarifaHora(now)[4]
    data = TarifaHora(now)[5]
    media = TarifaHora(now)[6]
    context =  context | ahora
    context =  context | maximo
    context =  context | minimo
    context =  context | tarifas
    return render(request, 'datascience/tarifaselectricas.html', {
        'context': context, 
        'labels': labels,
        'data': data,
        'ahora': ahora,
        'maximo':maximo,
        'minimo': minimo,
        'media': media
        })
        
def turismo(request):
    
    lgd = True # Logging desactivado, False, salen los log 
    context = {}
    
    # Selección de categoría
    form = SelectCategoriaForm()
    item = request.GET.get('categoria')
    print(item)
    try:
        itemarray = ast.literal_eval(item) # pasa  a array
        codigo = itemarray[0]
        categoria_nombre = itemarray[1]
    except:
        codigo = 'EOT1'
        categoria_nombre = 'Nacional. Viajeros'
    

    data = tur.bd_turismo (bd = BASEDATOS, codigo= codigo, n_ultimos = 25, lg = lgd)
    predict = tur.bd_turismopredict (bd = BASEDATOS, codigo= codigo, lg = lgd)
    forecast = tur.bd_turismoforecast (bd = BASEDATOS, codigo= codigo, lg = lgd)
    #tendencia = tur.hp_filter (codigo= codigo, local_log = False)
    #regresion = tur.regression(codigo = codigo, local_log = False)
    context = {
        'form': form,
        'codigo': codigo,
        'categoria_nombre': categoria_nombre,
        #'xy': data[0], # dict last 25
        'x': data[1],
        'y': data[2],
        'y_12': data[3],
        'y_var12': data[4],
        #'xy_all': predict[0], # dict todos los valores
        'x_trend': predict[1],
        'y_trend': predict[6],
        'y_trend_rc': predict[7],
        'xy_forecast': forecast[0], # dict 12 forecast
        'x_regresion': forecast[1],
        'y_regresion': forecast[2],
        'y_regresion_12': forecast[3],
        'y_regresion_var12': forecast[4],
        'ci_lower': forecast[5],
        'ci_upper': forecast[6],
        'R2': predict[8],
        }
    return render(request, 'datascience/turismo.html', context)

       
def transporteaereo(request):
    
    lgd = True # Logging desactivado, False, salen los log 
    context = {}
    
    # Selección de categoría
    form = SelectCategoriataereoForm()
    item = request.GET.get('categoria')
    print(item)
    try:
        itemarray = ast.literal_eval(item) # pasa  a array
        codigo = itemarray[0]
        categoria_nombre = itemarray[1]
    except:
        codigo = 1
        categoria_nombre = 'Pasajeros -- Total'
    
    #Extracción de datos
    data = ta.bd_taereopredict (BASEDATOS, 'TaereoPredict', codigo, n_ultimos = 25, lg = lgd)
    predict = ta.bd_taereopredict (BASEDATOS, 'TaereoPredict', codigo, n_ultimos = '*', lg = lgd)
    forecast = ta.bd_taereoforecast (BASEDATOS, 'TaereoForecast', codigo, lg = lgd)
    ta_anual = ta.bd_taereoanual (BASEDATOS, 'TaereoAnual', codigo, lg = lgd)
    #y_anual = [x/10 for x in ta_anual[2]] # Porque parecían los datos multiplicados por 10
    context = {
        'form': form,
        'codigo': codigo,
        'categoria_nombre': categoria_nombre,
        #'xy': data[0], # dict last 25
        'x': data[1],
        'y': data[2],
        'y_12': data[3],
        'y_var12': data[4],
        #'xy_all': predict[0], # dict todos los valores
        'x_trend': predict[1],
        'y_trend': predict[6],
        'y_trend_rc': predict[7],
        'xy_forecast': forecast[0], # dict 12 forecast
        'x_regresion': forecast[1],
        'y_regresion': forecast[2],
        'y_regresion_12': forecast[3],
        'y_regresion_var12': forecast[4],
        'ci_lower': forecast[5],
        'ci_upper': forecast[6],
        'R2': predict[8],
        'x_anual':ta_anual[1],
        'y_anual':ta_anual[2],
        
        }
    return render(request, 'datascience/transporteaereo.html', context)


       
def seguridadsocialop(request):
    '''Seguridad social ocupados y parados'''
    lgd = True # Logging desactivado, False, salen los log 
    context = {}
    
    # Selección de categoría
    form = SelectCategoriassForm()
    item = request.GET.get('categoria')
    print(item)
    try:
        itemarray = ast.literal_eval(item) # pasa  a array
        codigo = itemarray[0]
        categoria_nombre = itemarray[1]
    except:
        codigo = 1
        categoria_nombre = 'Ocupados -- Total'
    
    #Extracción de datos
    
    data = ss.bd_sspredict (BASEDATOS, 'SSPredict', codigo, n_ultimos = 13, lg = lgd)
    predict =ss.bd_sspredict (BASEDATOS, 'SSPredict', codigo, n_ultimos = '*', lg = lgd)
    forecast =ss.bd_ssforecast (BASEDATOS, 'SSForecast', codigo, lg = lgd)
        
    #y_anual = [x/10 for x in ta_anual[2]] # Porque vienen los datos multiplicados por 10
    context = {
        'form': form,
        'codigo': codigo,
        'categoria_nombre': categoria_nombre,
        #'xy': data[0], # dict last 25
        'x': data[1],
        'y': data[2],
        'y_12': data[3],
        'y_var12': data[4],
        #'xy_all': predict[0], # dict todos los valores
        'x_trend': predict[1],
        'y_trend': predict[6],
        'y_trend_rc': predict[7],
        'xy_forecast': forecast[0], # dict 12 forecast
        'x_regresion': forecast[1],
        'y_regresion': forecast[2],
        'y_regresion_12': forecast[3],
        'y_regresion_var12': forecast[4],
        'ci_lower': forecast[5],
        'ci_upper': forecast[6],
        'R2': predict[8],

        
        }
    return render(request, 'datascience/seguridadsocialop.html', context)
