#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);
    if (error) {
      Serial.print(F("deserializeJson() falhou: "));
      Serial.println(error.c_str());
    }
  } else {
    Serial.print(F("Falha ao obter dados da base de dados. Código de resposta HTTP: "));
    Serial.println(httpResponseCode);
  }
  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>()) {
    for (JsonPair kvp : registro) {
      String nomeRfid = kvp.key().c_str();
      if (nomeRfid.endsWith(rfid)) {
        return nomeRfid.substring(0, nomeRfid.indexOf(':'));
      }
    }
  }
  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 payload = Serial.readStringUntil('\n');
    payload.trim(); // Remove espaços em branco extras
    String nomeRfid = payload.substring(0, payload.indexOf(':'));
    String rfid = payload.substring(payload.indexOf(':') + 1);
    lerBaseDeDadosRegistros(); // Realiza a leitura dos registros da base de dados
    String nomeAssociado = obterNomeAssociado(rfid);
    if (nomeAssociado != "") {
      Serial.println("Nome associado à tag RFID '" + rfid + "': " + nomeAssociado);
    } else {
      Serial.println("Tag RFID '" + rfid + "' não registrada.");
    }
  }
}