import psycopg2
import time
import os

DB_CONFIG = {
    "dbname": "labtwin",
    "user": "labtwin",
    "password": "Lenovo2028",
    "host": "localhost"
}

NOTES_DIR = "/opt/barehands/sample-notes"

def update_ar():
    try:
        conn = psycopg2.connect(**DB_CONFIG)
        cur = conn.cursor()
        
        cur.execute('''
            SELECT d.id, d.alias, d.estado_actual, m.uso_cpu, m.uso_ram, m.temperatura_cpu, m.espacio_disco_libre
            FROM dispositivos d
            LEFT JOIN (
                SELECT DISTINCT ON (dispositivo_id) *
                FROM metricas_monitoreo
                ORDER BY dispositivo_id, timestamp DESC
            ) m ON d.id = m.dispositivo_id
        ''')
        devices = cur.fetchall()
        
        cur.execute('''
            SELECT dispositivo_id, tipo_fallo_predicho, probabilidad_fallo
            FROM alertas_predicciones
            WHERE atendida = False
        ''')
        alerts = {row[0]: row for row in cur.fetchall()}
        
        for dev in devices:
            d_id, alias, estado, cpu, ram, temp, disco = dev
            if cpu is None: continue 
            
            alert = alerts.get(d_id)
            
            estado_emoji = "🟢 Operativo"
            alert_text = "Ninguna"
            
            if alert:
                estado_emoji = "🔴 Falla Critica"
                alert_text = f"{alert[1]} ({alert[2]}% prob)"
            elif estado != "Operativo":
                estado_emoji = "🟡 " + (estado or "Desconocido")
            
            md_content = f'''# {alias or d_id}

* **Estado:** {estado_emoji}
* **CPU:** {cpu}% (Temp: {temp}C)
* **RAM:** {ram}%
* **Disco:** {disco}% libre
* **Alertas:** {alert_text}
'''
            with open(os.path.join(NOTES_DIR, f"{d_id}.md"), "w", encoding="utf-8") as f:
                f.write(md_content)
                
        cur.close()
        conn.close()
    except Exception as e:
        print("Error:", e)

if __name__ == "__main__":
    if not os.path.exists(NOTES_DIR):
        os.makedirs(NOTES_DIR, exist_ok=True)
    while True:
        update_ar()
        time.sleep(5)
