# Primero llamo los módulos a trabajar:

from machine import Pin, PWM
import network
import urequests
import time
import ntptime
import json


# Objetos:

pir = Pin(15, Pin.IN, Pin.PULL_DOWN)
zumbador = PWM(Pin(2), freq = 440, duty = 0)

#Conectando a WIFI

print ("Conectando a la red", end="")

sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')

while not sta_if.isconnected():
    print(".", end="")
    time.sleep(0.5)

print("\n")
print("Conectando exitosamente 👌")
print("\n")

# Defino Zumbador
def sonido(freq,sleep):

    zumbador.freq(freq)
    zumbador.duty(512)
    time.sleep(sleep)

# Apagar Zumbador:
def apagar_zumbador():
    zumbador.duty(0)

# Función para enviar datos a la API cuando hay detección
def enviar_datos_api():
    url = "https://aproximacion-evidencia1.onrender.com/api/sensor_movimiento"  # Cambia el endpoint según sea necesario
    data = {"mensaje": ["Movimiento detectado en el sensor"]}
    headers = {'Content-Type': 'application/json'}

    try:
        response = urequests.post(url, data=json.dumps(data), headers=headers)
        if response.status_code == 200:
            print("Datos enviados correctamente:", response.json())
        else:
            print("Error al enviar los datos:", response.status_code, response.text)
        response.close()  # Cierra la conexión para liberar memoria
    except Exception as e:
        print("Error en la solicitud:", e)
        if 'response' in locals():  # Verifica si 'response' fue creada
            response.close()  # Cierra la conexión en caso de error


# Ciclo:

while True:
    estado = pir.value()
    print(estado)    
    time.sleep(1)

    if estado == 1:
        print("Hay alguien en el sensor ⚠️")
        
        frecuencias = [440, 900]
        for _ in range(3):
            for freq in frecuencias:
                sonido(freq, 0.5)
        apagar_zumbador()

        # Enviar mensaje a la API
        enviar_datos_api()
        time.sleep(5)  # Retardo después de enviar los datos

    elif estado == 0:
        print("Sin movimientos")
        apagar_zumbador()