#!/usr/bin/env python3
# seguridadsocial.py

"""Datos de paro y ocupados"""


import logging
import sys
import pathlib
import time
from datetime import datetime
from urllib import request
import pandas as pd
import matplotlib.pyplot as plt

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 data_download (llog):
    
    ''' 
    Descarga los datos a excel de aeronaves (salidas y llegadas), 
    pasajeros y mercancías (salidas y llegadas) de la web: 
    https://www.ine.es/jaxiT3/dlgExport.htm?t=4247'
    '''
    
    logger = logging.getLogger('&data_download')
    logger.disabled = llog
    
    urls = ['https://www.ine.es/jaxiT3/files/t/es/xlsx/4247.xlsx',
            'https://www.ine.es/jaxiT3/files/t/es/xlsx/3965.xlsx?nocab=1',
            'https://www.ine.es/jaxiT3/files/t/es/xlsx/3959.xlsx?nocab=1'
            ]
    ficheros =['TasaParo', 'Parados', 'Ocupados']
    
    for url in urls:
        df = pd.read_excel(url, header=0)
        #column_names = ['PERIODO', 'TOTAL', 'NACIONALTOTAL', 'NACIONALREGULAR', 'NACIONALNOREGULAR', 'INTERNACIONALTOTAL', 'INTERNACIONALREGULAR', 'INTERNACIONALNOREGULAR']
        #df = df.set_axis(column_names, axis = 1) # Cambia el nombre de las columnas
        fichero = 'd_' + ficheros[urls.index(url)] + '.xlsx'
        df.to_excel(fichero, index = False)
        logger.info(fichero + ': '+ url)
    
    return None

def data_transform (llog, f):
    
    ''' 
    Transforma datos del fichero excel original
    
    '''
    
    logger = logging.getLogger('&data_transform')
    logger.disabled = llog
    

    df = pd.read_excel(f, header=7)
    logger.info('File: ' + f)
    df = df.T # or df.transpose()
    #df.drop(df.columns[[0]], axis=1, inplace=True)
    df = df.iloc[: , 1:6]
    df = df.apply(lambda x: x.astype(str).str.upper())# todo df a mayusculas
    column_names = df.iloc[0].to_list()
    column_names = [c.replace(' ', '') for c in column_names]
    df = df.set_axis(column_names, axis = 1) # Cambia el nombre de las columnas
    print(column_names)
    df=df.reset_index(drop=False) # Reset index
    df = df.drop(0)
    df=df.reset_index(drop=True) # Reset index
    df.rename(columns={'index':'PERIODO'},
               inplace=True)
    df[['TRIMESTRE','GRUPO']]=df.PERIODO.str.split(pat='.',expand=True)
    df.GRUPO = df.GRUPO.replace({None: 0})
    df['GRUPO'] = df['GRUPO'].astype(int)
    grupos = ['Total', 'De 16 a 19 años', 'De 20 a 24 años', 'De 25 a 54 años', '55 y más años']
    df.TRIMESTRE = df.TRIMESTRE.replace('T', 'Q', regex=True)
    df['FECHA'] = pd.to_datetime(df['TRIMESTRE']).dt.normalize()
    df['TOTAL'] = df['TOTAL'].astype(float)

    #Exporta fichero de datos transformados
    fichero = f[2:]
    df.to_excel('dt_'+ fichero, index = True)
      
    return df

    
def grafica(f,titulo):
    
    df = pd.read_excel(f)
    grupos = ['Total', 'De 16 a 19 años', 'De 20 a 24 años', 'De 25 a 54 años', '55 y más años']

    # plot with various axes scales   
    fig, axs = plt.subplots(ncols=1, nrows=len(grupos), figsize=(8, 12),
                        constrained_layout=True)
    font = {'family': 'serif',
        'color':  'darkblue',
        'weight': 'bold',
        'size': 16,
        }
    fig.suptitle(titulo,fontdict=font)
    
    plt.rcParams['axes.titley'] = 1.0    # y is in axes-relative coordinates.
    plt.rcParams['axes.titlepad'] = -14  # pad is in points...
    
    for g in range(len(grupos)):
        ax = axs[g] # Datos mensuales
        dfl = df[df['GRUPO'] == g]
        x = dfl['FECHA'].tolist()
        y = dfl['TOTAL'].tolist()
        ax.plot(x, y, label = grupos[g])
        #ax.set_title('Mensual')
        ax.grid(True)
        ax.legend(loc='upper left')
    
    
    titulofil = titulo[0:titulo.find(' ')] # Nombre hasta el primer blanco
    fig.savefig('g_'+ titulofil + '.png')
    fig.show()
    

def main(carga=0):
    
    '''
    Parametros carga:
        1 : carga y grafica
        resto o nada : grafica

    Returns
    -------
    None

    '''
    
    local_log_disabled = False
    
    ficheros =['Parados', 'Ocupados']
    unidades = ['Personas x 1000', 'Personas x 1000']
    
    if carga == 1: 
    
        # Exporta ficheros originales d_
        data_download(local_log_disabled)
        # Exporta ficheros transformados dt_
        for fichero in ficheros:   
            f = 'd_{}.xlsx'.format(fichero)  
            df = data_transform(local_log_disabled, f)
    
    
    for fichero in ficheros:  
        ft = 'dt_{}.xlsx'.format(fichero) 
        titulo_grafica = fichero + ' (' + unidades[ficheros.index(fichero)] + ')'
        grafica(ft, titulo_grafica)
        
    return None
    

if __name__ == "__main__":
    start = time.perf_counter()
    assert sys.version_info >= (3, 7),"Script requires Python 3.7+."
    here = pathlib.Path(__file__).parent
    logger.disabled = False
    logger.info(here)
    logger.info('Initium novum') # Inicio
    
    main(carga = 1) # carga = 1 para carga y tranformacion de ficheros
      
    logger.info('Ave verum') # Fin
    elapsed = time.perf_counter() - start
    logger.info(f"Program completed in {elapsed:0.5f} seconds.")

