#include <WiFi.h>
#include <PubSubClient.h>

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

const char *mqtt_broker = "0.tcp.ap.ngrok.io";
const char *topic = "tester";
const char *mqtt_username = "yy";
const char *mqtt_password = "alifqi";
const int mqtt_port = 12704;

#define BUTTON_PIN 2

int currentState;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  Serial.begin(115200);

  WiFi.begin(ssid, password);

  Serial.println("Terhubung ke Wi-Fi");

  client.setServer(mqtt_broker, mqtt_port);
  client.setCallback(callback);
  
  while (!client.connected()) {
    String client_id = "esp32-node-button";

    if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("Terhubung ke MQTT Broker");
      Serial.println("Tekan tombol untuk mengirim pesan");
    }
  }
}

void callback(char *topic, byte *payload, unsigned int length) {
  Serial.print("Topic : ");
  Serial.println(topic);
  Serial.print("Pesan : ");

  for (int i = 0; i < length; i++) {
    Serial.print((char) payload[i]);
  }

  Serial.println();
  Serial.println("--------------------------------");
}

void loop() {
 client.loop();

  currentState = digitalRead(BUTTON_PIN);

  if(currentState == LOW) {
    client.publish(topic, "Seseorang menekan tombol");
    client.subscribe(topic);
  }

  delay(100);
}