import conector_bd
import json
import logging
import datetime
from datetime import timezone
import os
from dotenv import load_dotenv

# Cargar las variables de entorno desde el archivo .env
load_dotenv()

# Configuración básica del sistema de logging
logging.basicConfig(level=logging.INFO)

# Definimos la constante global para el periodo de tiempo (en minutos)
PERIODO_TIEMPO_MINUTOS = 5  # 1440 minutos equivalen a 1 día
VALOR_INVALIDO = 10000

host = os.getenv("DB_HOST")
port = os.getenv("DB_PORT")
user = os.getenv("DB_USER")
password = os.getenv("DB_PASSWORD")
database = os.getenv("DB_NAME")

def actualizar_valores_antiguos(conexion):
    """
    Actualiza el campo 'valor' de los registros en la tabla 'tiempo_real' donde 'updated_at' 
    es más antiguo que la fecha actual menos el periodo de tiempo definido en minutos.
    """
    try:
        fecha_limite = datetime.datetime.now(timezone.utc) - datetime.timedelta(minutes=PERIODO_TIEMPO_MINUTOS)
        #fecha_limite = datetime.datetime.now() - datetime.timedelta(minutes=PERIODO_TIEMPO_MINUTOS)
        consulta_seleccion = """
        SELECT idBlue, io
        FROM tiempo_real
        WHERE updated_at < %s
        """
        parametros = (fecha_limite,)
        registros_antiguos = conector_bd.ejecutar_consulta(conexion, consulta_seleccion, parametros)

        if registros_antiguos:
            for registro in registros_antiguos:
                idBlue, io = registro
                consulta_actualizacion = """
                UPDATE tiempo_real
                SET valor = %s
                WHERE idBlue = %s AND io = %s
                """
                
                parametros_actualizacion = (VALOR_INVALIDO, idBlue, io)
                conector_bd.ejecutar_consulta(conexion, consulta_actualizacion, parametros_actualizacion)

        logging.info(f"Se actualizaron {len(registros_antiguos)} registros antiguos en la tabla 'tiempo_real'.")

    except Exception as e:
        logging.error(f"Error al actualizar valores antiguos: {e}")

def main():
    """
    Función principal que establece la conexión con la base de datos, obtiene los registros no procesados
    y procesa cada uno de ellos.
    """
    try:
        conexion = conector_bd.crear_conexion(host, user, password, port, database)
        actualizar_valores_antiguos(conexion)
        # Procesar registros de tiempo real
    except Exception as e:
        logging.error(f"Ocurrió un error: {e}")
    finally:
        if conexion and conexion.is_connected():
            conexion.close()

if __name__ == "__main__":
    main()