from sensors.dht22 import leggi_dht
from sensors.mq135_sensor import leggi_aria
from sensors.weather_api import get_external_weather, descrizione_meteo
from logica.temperatura import valuta_temperatura
from logica.umidita import valuta_umidita
from logica.qualita_aria import valuta_aria
from logica.meteo import valuta_meteo
from led.temperatura_led import imposta_colore
from led.umidita_led import imposta_colore_umidita
from led.aria_led import imposta_colore_aria
from led.meteo_led import imposta_colore_meteo
from motore.motore_logico import analizza_ambiente, get_messaggio_salvato
from ai.assistente import genera_messaggio
from campanelle.campanelle import controlla_campanelle

import time
import json
import os

while True:

    temperatura, umidita = leggi_dht()
    ppm, stato = leggi_aria()
    meteo, giornaliero = get_external_weather()

    colore_temperatura = valuta_temperatura(temperatura)
    colore_umidita = valuta_umidita(umidita)
    colore_aria = valuta_aria(ppm)
    colore_meteo = valuta_meteo(
    meteo["temperature_2m"],
    meteo["relative_humidity_2m"],
    meteo["rain"],
    meteo["wind_speed_10m"],
    giornaliero["uv_index_max"][0],
    meteo["weather_code"]
)
    problema, dati = analizza_ambiente(
    temperatura,
    umidita,
    ppm,
    stato,
    meteo,
    giornaliero,
    colore_temperatura,
    colore_umidita,
    colore_aria,
    colore_meteo
)

    imposta_colore(colore_temperatura)
    imposta_colore_umidita(colore_umidita)
    imposta_colore_aria(colore_aria)
    imposta_colore_meteo(colore_meteo)

    controlla_campanelle(
        colore_temperatura,
        colore_umidita,
        colore_aria,
        colore_meteo
)

    print(f"Temperatura: {temperatura:.1f} °C")
    print(f"Colore temperatura: {colore_temperatura}")

    print(f"Umidità: {umidita:.1f} %")
    print(f"Colore umidità: {colore_umidita}")

    print(f"Qualità aria: {ppm:.2f} PPM")
    print(f"Stato: {stato}")

    print(f"Condizione: {descrizione_meteo(meteo['weather_code'])}")
    print(f"Temperatura esterna: {meteo['temperature_2m']} °C")
    print(f"Umidità esterna: {meteo['relative_humidity_2m']} %")
    print(f"Pioggia: {meteo['rain']} mm")
    print(f"Vento: {meteo['wind_speed_10m']} km/h")
    print(f"UV massimo: {giornaliero['uv_index_max'][0]}")
    print(f"Colore meteo: {colore_meteo}")
    print("-----------------------------")

    print("----------------------------")

    messaggio = get_messaggio_salvato()

    dati_dashboard = {
        "temperatura": temperatura,
        "umidita": umidita,
        "qualita_aria": ppm,
        "stato_aria": stato,

        "temperatura_esterna": meteo["temperature_2m"],
        "umidita_esterna": meteo["relative_humidity_2m"],
        "pioggia": meteo["rain"],
        "vento": meteo["wind_speed_10m"],
        "meteo": descrizione_meteo(meteo["weather_code"]),

        "colore_temperatura": colore_temperatura,
        "colore_umidita": colore_umidita,
        "colore_aria": colore_aria,
        "colore_meteo": colore_meteo,

        "comfort": dati["comfort"],

        "problema": problema,
        "messaggio": messaggio
}

    percorso_json = os.path.join("dashboard", "web", "api", "dati.json")

    with open(percorso_json, "w") as f:
        json.dump(dati_dashboard, f, indent=4)

time.sleep(2)
