#!/usr/bin/env python3
# tarifaselectricas.py

"""Descarga las tarifas eléctricas de un día en concreto"""


import logging
import sys
import pathlib
import time
from datetime import datetime
from urllib import request
import pandas as pd

logging.basicConfig(
    format="%(asctime)s %(levelname)s:%(name)s: %(message)s",
    level=logging.DEBUG,
    datefmt="%H:%M:%S",
    stream=sys.stderr,
)
logger = logging.getLogger(__name__)

       
def TarifaHora(FechaHora):
    
    ''' Descarga las tarifas electricas de un día formato AAAA-MM-DD
    las carga en un dataframe y las grafica'''
    
    logger = logging.getLogger('&tarifahora')
    logger.disabled = True
    
    day = FechaHora.strftime('%Y-%m-%d')  
    hora = FechaHora.strftime('%H') 
    url = 'https://api.esios.ree.es/archives/71/download?date_type=datos&end_date='+day+'T23%3A59%3A59%2B00%3A00&locale=es&start_date='+day+'T00%3A00%3A00%2B00%3A00'
    df = pd.read_excel(url, header=4).iloc[: , :5]
    column_names = ['DIA', 'HORA', 'PEAJE', 'PERIODO', 'FEU']
    df = df.set_axis(column_names, axis = 1) # Cambia el nombre de las columnas
    df.FEU = df.FEU/1000 # Redondea la columna
    df.FEU = df.FEU.round(4) # Redondea la columna
    df.HORA = df.HORA - 1 # Sistema 0-23 horas
    df.HORA = df.HORA.astype(str)
    df0 = df[['HORA','FEU']] # Selecciona la columna HORA y FEU
    tarifas = dict(df0.values)
    maxs = df0['FEU'].max() # Maximo
    maximo = {'Máximo' : maxs} 
    mins = df0['FEU'].min() # Minimo
    minimo = {'Mínimo' : mins}
    means = df0['FEU'].mean() # Minimo
    means = round(means, 4)
    media = {'Media' : means}
    tarifa_ahora = df0['FEU'].values[int(hora)]
    ahora = {'Ahora' : tarifa_ahora}
    labels = df0['HORA'].tolist()
    data = df0['FEU'].tolist()
    
    logger.info('(URL) '+ url)
    logger.info('(MAXIMO) ' + str(maxs))
    logger.info('(MINIMO) ' + str(mins))
    logger.info('(MEDIA) ' + str(means))
    logger.info('(HORA) ' + str(hora))
    logger.info('(Ahora) ' + str(tarifa_ahora))
    
    return tarifas, maximo, minimo, ahora, labels, data, media

if __name__ == "__main__":
    start = time.perf_counter()
    assert sys.version_info >= (3, 7), "Script requires Python 3.7+."
    here = pathlib.Path(__file__).parent
    logger.info(here)
    logger.info('Initium novum') # Inicio

    now = datetime.now()
    print(TarifaHora(now))
   
    logger.info('Ave verum') # Fin
    elapsed = time.perf_counter() - start
    logger.info(f"Program completed in {elapsed:0.5f} seconds.")

