#include <WiFi.h>
#include <HTTPClient.h>

#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define LED1 26
#define LED2 27

const char* serverAddress = "https://esp32-5d7f8d64c991.herokuapp.com/iot/1";  // Reemplaza con la dirección de tu servidor
#define HTTP_TIMEOUT 10000  // 10 segundos de tiempo de espera

bool led1State = false;
bool led2State = false;

unsigned long previousMillis = 0;
const long interval = 5000;  // Intervalo de tiempo en milisegundos (5 segundos)

void sendHttpRequest(const char* path) {
  HTTPClient http;
  String url = "https://" + String(serverAddress) + path;

  http.begin(url);
  http.setTimeout(HTTP_TIMEOUT);  // Ajusta el tiempo de espera

  int httpCode = http.GET();

  if (httpCode > 0) {
    Serial.printf("[HTTP] GET... code: %d\n", httpCode);

    if (httpCode == HTTP_CODE_OK) {
      String payload = http.getString();
      Serial.println(payload);

      int valueIndex = payload.indexOf("\"value\":");

      if (valueIndex != -1) {
        int endIndex = payload.indexOf(',', valueIndex);
        String valueStr = payload.substring(valueIndex + 8, endIndex);
        int value = valueStr.toInt();

        // Actualizar el estado de los LEDs basándose en el valor obtenido del servidor
        led1State = (value == 1);
        led2State = !led1State;  // LED2 se configura de manera opuesta a LED1
        digitalWrite(LED1, led1State);
        digitalWrite(LED2, led2State);
      }
    }
  } else {
    Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
  }

  http.end();
}

void setup(void) {
  Serial.begin(115200);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
  }
  Serial.println("Connected to WiFi");
}

void loop(void) {
  // Realizar una solicitud HTTP para obtener el estado de los LEDs
  sendHttpRequest("/toggle");

  // Esperar un tiempo antes de realizar la siguiente solicitud (por ejemplo, 5 segundos)
  delay(5000);
}