#include <Arduino.h>
#include <NewPing.h>
 #include <WiFi.h> //ESP32
//#include <ESP8266WiFi.h> //ESP8266
 #include <HTTPClient.h> //ESP32
#include <ArduinoJson.h>
//#include <ESP8266HTTPClient.h> //ESP8266

const char *ssid = "Wokwi-GUEST";
const char *password = "";

String serverName = "https://banjir.smdev-staging.web.id";
String uid = "a18cd16d-c313-11ee-ad91-0050564ce106";

#define TRIGGER_PIN 13
#define ECHO_PIN 14
#define MAX_DISTANCE 400
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float tinggiMaksimal = 400.0;
float tinggiMukaAir = 0.0;
float jarak;
int iteration = 10;

void httpPostRequest() {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;

    String serverPath = String() + serverName + "/send/location";
    http.begin(serverPath);
    http.addHeader("Content-Type", "application/json");
    http.addHeader("Accept", "application/json");
    http.addHeader("x-uid", uid);

    // ArduinoJson
    JsonDocument doc;
    doc["lat"] = "-6.8594367";
    doc["lng"] = "107.9234081";
    String json;
    serializeJson(doc, json);

    int httpResponseCode = http.POST(json);
    if (httpResponseCode > 0) {
      String response = http.getString();
      Serial.println(httpResponseCode);
      Serial.println(response);
    } else {
      Serial.print("Error on sending POST: ");
      Serial.println(httpResponseCode);
    }
    http.end();
  } else {
    Serial.println("Error in WiFi connection");
  }
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(100);
  jarak = (sonar.ping_median(iteration) / 2) * 0.0343;
  Serial.println(jarak);
  tinggiMukaAir = tinggiMaksimal - jarak;
  Serial.println(tinggiMukaAir);
  Serial.println();

  if (tinggiMukaAir > 150) {
    httpPostRequest();
  }
}