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

const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* registrosEndpoint = "https://opensheet.elk.sh/1_BXCMTy_jb7ujJQK0x407Wy5ivHaqX3vK5ec8eQZQwU/Folha1";

DynamicJsonDocument registros(1024); // Armazenar registros da base de dados

void lerBaseDeDadosRegistros() {
  HTTPClient http;
  http.begin(registrosEndpoint);
  int httpResponseCode = http.GET();
  if (httpResponseCode == 200) {
    String payload = http.getString();
    DeserializationError error = deserializeJson(registros, payload); // Corrigindo a chamada da função
    if (error) {
      Serial.print(F("deserializeJson() falhou: "));
      Serial.println(error.c_str());
    }
  }
  http.end();
}

String obterNomeAssociado(String rfid) {
  // Procura o nome associado ao UID da tag RFID na lista de registros
  for (JsonObject registro : registros.as<JsonArray>()) {
    if (registro.containsKey(rfid)) {
      return registro[rfid].as<String>();
    }
  }
  return ""; // Retorna vazio se não encontrado
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Conectando ao WiFi...");
  }
  Serial.println("Conectado ao WiFi.");
}

void loop() {
  if (Serial.available() > 0) {
    String rfidDigitado = Serial.readStringUntil('\n');
    rfidDigitado.trim(); // Remove espaços em branco extras
    lerBaseDeDadosRegistros(); // Realiza a leitura dos registros da base de dados
    String nomeAssociado = obterNomeAssociado(rfidDigitado);
    if (nomeAssociado != "") {
      Serial.println("Nome associado à tag RFID '" + rfidDigitado + "': " + nomeAssociado);
    } else {
      Serial.println("Tag RFID '" + rfidDigitado + "' não registrada.");
    }
  }
}