/*
   Código demonstrativo para a aula de Sistemas Embarcados,
   Curso de Ciência da Computação e Engenharia da Computação
   EEP.

   https://arduinojson.org/v6/assistant/

*/

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

const String url = "http://things.ubidots.com/api/v1.6/data/raw/series";

LiquidCrystal_I2C lcd(0x27, 16, 2);

HTTPClient cliente;

void setup() {

  WiFi.begin("Wokwi-GUEST", "");

  while (WiFi.status() != WL_CONNECTED) {
    delay(250);
  }

  lcd.init();
  lcd.backlight();
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print(" Escola de Eng. ");
  lcd.setCursor(0, 1);
  lcd.print(" de  Piracicaba ");

  delay(3000);

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("    Sistemas    ");
  lcd.setCursor(0, 1);
  lcd.print("   Embarcados   ");

  delay(3000);

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("   Exercicio    ");
  lcd.setCursor(0, 1);
  lcd.print("----------------");

  delay(3000);

}

void loop() {

  Serial.println("Requisicao: POST");

  // Substituir sua_variavel pelo id que identifica a variável desejada - ID.
  // String payload = "{\"variables\": [\"sua_variavel\",\"sua_variavel\",\"sua_variavel\",\"sua_variavel\"],\"columns\": [\"value.value\"], \"limit\": 1 }";

  String payload = "{\"variables\": [\"sua_variavel\",\"sua_variavel\",\"sua_variavel\",\"sua_variavel\"],\"columns\": [\"value.value\"], \"limit\": 1 }";

  int data = payload.length();

  cliente.begin(url);

  cliente.addHeader("Content-Type", "application/json");
  cliente.addHeader("Content-Length", String(data));

  // Substituir seu_token_default pela chave que identifica o seu token - TOKEN default.
  // cliente.addHeader("X-Auth-Token","seu_token_default");

  cliente.addHeader("X-Auth-Token", "seu_token_default");

  int statusCode = cliente.POST(payload);
  String response = cliente.getString();

  StaticJsonDocument<512> doc;

  DeserializationError error = deserializeJson(doc, response);

  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  JsonArray results_0 = doc["results"][0];
  int results_0_0 = results_0[0];
  int results_0_1 = results_0[1];
  int results_0_2 = results_0[2];
  int results_0_3 = results_0[3];

  JsonArray columns = doc["columns"];
  const char* columns_0 = columns[0];
  const char* columns_1 = columns[1];
  const char* columns_2 = columns[2];
  const char* columns_3 = columns[3];

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temperatura (C) ");
  lcd.setCursor(0, 1);
  lcd.print(results_0_0);

  delay(3000);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temperatura (F) ");
  lcd.setCursor(0, 1);
  lcd.print(results_0_1);

  delay(3000);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Distancia (Cm) ");
  lcd.setCursor(0, 1);
  lcd.print(results_0_2);

  delay(3000);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Distancia (Pol) ");
  lcd.setCursor(0, 1);
  lcd.print(results_0_3);

  delay(3000);

}