import pandas as pd
from influxdb import DataFrameClient
import os
import time
import datetime

def main():
    # Conectarse a la base de datos InfluxDB
    client = DataFrameClient(host='localhost', port=8086)
    # Se listan todos los archivos que estan en la carpeta actual.
    while True:
        try:
            for cadaCSV in os.listdir('/home/tasiva/helloworld/'):
                insertarArchivo(cadaCSV, client)
                time.sleep(0.1)
        except Exception as e:
            print("Error al introducir el archivo " + cadaCSV + ": " + str(e))
            main()


def insertarArchivo(nombreArchivo, client):
    try:
        # Se comprueba que sea un archivo csv.
        if nombreArchivo.endswith('.csv'):
            #print("Introduciendo el archivo: " + nombreArchivo)
            # Se abre el archivo csv.
            df = pd.read_csv('/home/tasiva/helloworld/' + nombreArchivo, sep=',', index_col=False)
            # Se obtiene un array con todas las columnas del DataFrame.
            arrayColumnas = list(df.keys())
            eliminarColumnas = []
            # Se recorren todas las columnas y se añade al array eliminarColumnas las que se quieren eliminar.
            for cadaColumna in arrayColumnas:
                cadaColumna = cadaColumna.strip()
                if cadaColumna == 'ID' or cadaColumna == 'id':
                    eliminarColumnas.append(cadaColumna)
            # Para eliminar las columas que estan en el array eliminarColumnas.
            df.drop(columns=eliminarColumnas, inplace=True)
            # Para eliminar el indice del DataFrame.
            df = df.reset_index(drop=True)
            # Para convertir la columna fecha a tipo datetime.
            df['fecha'] = df['fecha'].apply(
                lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S').timestamp())
            df["fecha"] = pd.to_datetime(df["fecha"], unit='s')
            #timestamp = df["fecha"].apply(lambda x: x.timestamp())
            '''d = {'fecha': ["2023-02-13 8:13:02"]}
                        df = pd.DataFrame(d)
                        df["fecha"] = pd.to_datetime(df["fecha"], infer_datetime_format=True)
                        print(type(datetime.datetime.strftime(df['fecha'][0], '%Y-%m-%d %H:%M:%S')))
                        horaString = datetime.datetime.strftime(df['fecha'][0], '%Y-%m-%d %H:%M:%S')
                        las8 = datetime.datetime.strptime(
                            horaString, '%Y-%m-%d %H:%M:%S')
                        las8 = las8.timestamp()
                        print(las8)'''
            #print(datetime.datetime(df["fecha"][0]).strptime('%Y-%m-%d %H:%M:%S'))
            # df['fecha'] = df['fecha'].apply(
            #    lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S').timestamp())
            # print(df['fecha'][10])
            # Para setear la columna fecha como indice.
            df.set_index('fecha', inplace=True)
            # Para eliminar las filas vacias.
            df.dropna(how='all',axis=0, inplace=True)
            # Para insertar en la base de datos de aps de la organizacion tasiva de la tabla nombreTabla.
            nombreTabla = nombreArchivo.split('.')[0]
            # Para escribir el DataFrame en la base de datos.
            client.write_points(
                df, nombreTabla, protocol='line', database='aps_demo')
            #print("Archivo " + nombreArchivo + " introducido correctamente.")
            os.remove('/home/tasiva/helloworld/' + nombreArchivo)
            time.sleep(0.1)
    except Exception as e:
        print("Error al introducir el archivo " + nombreArchivo + ": " + str(e))
        os.remove('/home/tasiva/helloworld/' + nombreArchivo)
        time.sleep(0.1)


if __name__ == "__main__":
    main()
