import network
import urequests as requests
import time

# Conexión a WiFi
ssid = "Wokwi-GUEST"
password = ""
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)

print("Conectando a WiFi...")
while not wifi.isconnected():
    time.sleep(1)
print("WiFi conectado. Configuración:", wifi.ifconfig())

# Configuración de Adafruit IO
AIO_USERNAME = "benjalvarado"  # Tu usuario de Adafruit IO
AIO_KEY = "aio_FrnV33IqjJpmTWuyARkdcb0Dxl8l"  # Tu clave AIO
FEED_SETPOINT = "setpoint"  # Feed para el Set Point
FEED_ALARMA = "alarma"  # Feed para la alarma

# Función para enviar datos a Adafruit IO
def enviar_dato(feed, valor):
    print(f"Enviando valor {valor} al feed {feed}...")
    url = f"https://io.adafruit.com/api/v2/{AIO_USERNAME}/feeds/{feed}/data"
    headers = {"X-AIO-Key": AIO_KEY, "Content-Type": "application/json"}
    data = {"value": valor}
    response = requests.post(url, json=data, headers=headers)
    if response.status_code == 200:
        print(f"Valor {valor} enviado con éxito al feed {feed}.")
    else:
        print(f"Error al enviar valor al feed {feed}: {response.status_code}, {response.text}")
    response.close()

# Obtener valor del set point
print("Obteniendo set point...")
setpoint_request = requests.get(
    f"https://io.adafruit.com/api/v2/{AIO_USERNAME}/feeds/{FEED_SETPOINT}/data/last",
    headers={"X-AIO-Key": AIO_KEY}
)
if setpoint_request.status_code == 200:
    setpoint = int(setpoint_request.json()["value"])
    print(f"Set point obtenido: {setpoint}")
else:
    print(f"Error obteniendo set point: {setpoint_request.status_code}, {setpoint_request.text}")
    setpoint = 70  # Valor predeterminado si no se puede obtener
setpoint_request.close()

# Ingreso de la ciudad
ciudad = input("Ingrese una ciudad: ")

# Obtener datos climáticos
print(f"Buscando datos climáticos para {ciudad}...")
datos_request = requests.get("https://api.boostr.cl/weather.json")
if datos_request.status_code == 200:
    datos = datos_request.json()["data"]
    humedad = None
    for i in datos:
        if ciudad.lower() == i["city"].lower():
            humedad = int(i["humidity"])
            print(f"Ciudad: {i['city']}, Humedad: {humedad}%")
            break
    if humedad is None:
        print("Ciudad no encontrada.")
else:
    print(f"Error obteniendo datos climáticos: {datos_request.status_code}, {datos_request.text}")
    humedad = None
datos_request.close()

# Lógica de control de alarma
if humedad is not None:
    if humedad < setpoint:
        print("Humedad menor al set point. Activando alarma.")
        enviar_dato(FEED_ALARMA, 1)
    else:
        print("Humedad mayor o igual al set point. Desactivando alarma.")
        enviar_dato(FEED_ALARMA, 0)
else:
    print("No se pudo obtener la humedad. No se realizaron cambios en la alarma.")

time.sleep(10)  # Espera de 10 segundos