#include <WiFi.h>
#include <Adafruit_MQTT.h>
#include <Adafruit_MQTT_Client.h>

// Definir WiFi y Adafruit IO credentials
const char* ssid = "TU_WIFI";
const char* password = "TU_PASSWORD";
#define AIO_SERVER "io.adafruit.com"
#define AIO_USERNAME "andbar086"
#define AIO_KEY "aio_gOfc37p1HlqbsX7txnJ2ELZdzb6G"

// Pines de LEDs
const int led1 = 1;
const int led2 = 2;
const int led3 = 3;
const int led4 = 4;

// Pines para los motores
const int stepper1Pin1 = 14;
const int stepper1Pin2 = 12;
const int stepper2Pin1 = 2;
const int stepper2Pin2 = 15;

// Inicializar conexión Wi-Fi
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, 1883, AIO_USERNAME, AIO_KEY);

// Inicializar feeds de Adafruit IO
Adafruit_MQTT_Subscribe ledFeed1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led1");
Adafruit_MQTT_Subscribe ledFeed2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led2");
Adafruit_MQTT_Subscribe ledFeed3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led3");
Adafruit_MQTT_Subscribe ledFeed4 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led4");

void setup() {
    Serial.begin(115200);

    // Conectar a WiFi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Conectando a WiFi...");
    }
    Serial.println("Conectado a WiFi");

    // Conectar a Adafruit IO
    mqtt.subscribe(&ledFeed1);
    mqtt.subscribe(&ledFeed2);
    mqtt.subscribe(&ledFeed3);
    mqtt.subscribe(&ledFeed4);

    if (mqtt.connect()) {
        Serial.println("Conectado a Adafruit IO");
    } else {
        Serial.println("Error de conexión a Adafruit IO");
    }

    // Configurar pines de LEDs y motores
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led4, OUTPUT);
    pinMode(stepper1Pin1, OUTPUT);
    pinMode(stepper1Pin2, OUTPUT);
    pinMode(stepper2Pin1, OUTPUT);
    pinMode(stepper2Pin2, OUTPUT);
}

void loop() {
    // Procesar paquetes MQTT
    Adafruit_MQTT_Subscribe *subscription;
    while ((subscription = mqtt.readSubscription(10000))) {
        int value = atoi((char *)subscription->lastread);

        if (subscription == &ledFeed1) {
            digitalWrite(led1, value);
        } else if (subscription == &ledFeed2) {
            digitalWrite(led2, value);
        } else if (subscription == &ledFeed3) {
            digitalWrite(led3, value);
        } else if (subscription == &ledFeed4) {
            digitalWrite(led4, value);
        }
    }

    // Verificar si al menos dos LEDs están encendidos
    int encendidos = digitalRead(led1) + digitalRead(led2) + digitalRead(led3) + digitalRead(led4);

    if (encendidos >= 2) {
        Serial.println("Encendiendo motores...");
        digitalWrite(stepper1Pin1, HIGH);
        digitalWrite(stepper1Pin2, HIGH);
        digitalWrite(stepper2Pin1, HIGH);
        digitalWrite(stepper2Pin2, HIGH);
        // Aquí puedes agregar la lógica para enviar un correo con IFTTT
    } else {
        digitalWrite(stepper1Pin1, LOW);
        digitalWrite(stepper1Pin2, LOW);
        digitalWrite(stepper2Pin1, LOW);
        digitalWrite(stepper2Pin2, LOW);
    }

    delay(1000);
}
A4988
A4988