#include <CTBot.h>

#define Lampu1 15
#define Lampu2 2
#define Lampu3 4
#define Lampu4 5

#define LAMPU_1_ON "Lampu_1_ON"
#define LAMPU_1_OFF "Lampu_1_OFF"
#define LAMPU_2_ON "Lampu_2_ON"
#define LAMPU_2_OFF "Lampu_2_OFF"
#define LAMPU_3_ON "Lampu_3_ON"
#define LAMPU_3_OFF "Lampu_3_OFF"
#define LAMPU_4_ON "Lampu_4_ON"
#define LAMPU_4_OFF "Lampu_4_OFF"
#define SEMUA_LAMPU_ON "Semua_Lampu_ON"
#define SEMUA_LAMPU_OFF "Semua_Lampu_OFF"
#define TIDAK "Tidak"

String Status_Lampu_1;
String Status_Lampu_2;
String Status_Lampu_3;
String Status_Lampu_4;

int Lampu_1 = LOW;
int Lampu_2 = LOW;
int Lampu_3 = LOW;
int Lampu_4 = LOW;

bool TampilkanTombol;

String ssid = "Wokwi-GUEST";
String pass = "";
String token = "6798712355:AAH5YqAOwBxtBvF6Ea1P2Ui38_Knp8gFqbo";

CTBot myBot;
CTBotReplyKeyboard Tbl;
CTBotInlineKeyboard TbLp1on, TbLp2on, TbLp3on, TbLp4on, TbLp1off, TbLp2off, TbLp3off, TbLp4off, TbLpAllon, TbLpAlloff;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Memulai Koneksi...");

  myBot.wifiConnect(ssid, pass);
  myBot.setTelegramToken(token);

  if (myBot.testConnection()) {
    Serial.println("\nKoneksi ke Telegram BOT Berhasil!");
  }
  else {
    Serial.println("\nTidak terkoneksi ke Telegram BOT");
  }

  pinMode(Lampu1, OUTPUT);
  pinMode(Lampu2, OUTPUT);
  pinMode(Lampu3, OUTPUT);
  pinMode(Lampu4, OUTPUT);

  digitalWrite(Lampu1, LOW);
  digitalWrite(Lampu2, LOW);
  digitalWrite(Lampu3, LOW);
  digitalWrite(Lampu4, LOW);

  Tbl.addButton("Lampu 1");
  Tbl.addButton("Lampu 2");
  Tbl.addButton("Lampu 3");
  Tbl.addButton("Lampu 4");
  Tbl.addRow();
  Tbl.addButton("Semua Lampu ON");
  Tbl.addButton("Semua Lampu OFF");
  Tbl.addRow();
  Tbl.addButton("Cek Status");
  Tbl.enableResize();
  TampilkanTombol = false;

  TbLp1on.addButton("✅ Ya", LAMPU_1_ON, CTBotKeyboardButtonQuery);
  TbLp1on.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp2on.addButton("✅ Ya", LAMPU_2_ON, CTBotKeyboardButtonQuery);
  TbLp2on.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp3on.addButton("✅ Ya", LAMPU_3_ON, CTBotKeyboardButtonQuery);
  TbLp3on.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp4on.addButton("✅ Ya", LAMPU_4_ON, CTBotKeyboardButtonQuery);
  TbLp4on.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp1off.addButton("✅ Ya", LAMPU_1_OFF, CTBotKeyboardButtonQuery);
  TbLp1off.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp2off.addButton("✅ Ya", LAMPU_2_OFF, CTBotKeyboardButtonQuery);
  TbLp2off.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp3off.addButton("✅ Ya", LAMPU_3_OFF, CTBotKeyboardButtonQuery);
  TbLp3off.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLp4off.addButton("✅ Ya", LAMPU_4_OFF, CTBotKeyboardButtonQuery);
  TbLp4off.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLpAllon.addButton("✅ Ya", SEMUA_LAMPU_ON, CTBotKeyboardButtonQuery);
  TbLpAllon.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);

  TbLpAlloff.addButton("✅ Ya", SEMUA_LAMPU_OFF, CTBotKeyboardButtonQuery);
  TbLpAlloff.addButton("❌ Tidak", TIDAK, CTBotKeyboardButtonQuery);
}

void loop() {
  TBMessage msg;

  if (myBot.getNewMessage(msg)) {
    if (msg.text.equalsIgnoreCase("/start")) {
      myBot.sendMessage(msg.sender.id, "Halo..\nSelamat Datang di Percobaan_VI Bot.\n\nGunakan tombol dibawah untuk mengontrol lampu 👇", Tbl);
      Serial.println("\nUser memulai Bot \n");
      TampilkanTombol = true;
    }
    else if (msg.text.equalsIgnoreCase("Lampu 1")) {
      if (Lampu_1 == HIGH) {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 1 dalam keadaan ON\nApakah anda ingin mematikan Lampu 1?", TbLp1off);
        Serial.println("\nUser mengirim perintah 'Lampu 1' \nSaat ini Lampu 1 dalam keadaan ON \n");
      }
      else {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 1 dalam keadaan OFF\nApakah anda ingin menyalakan Lampu 1?", TbLp1on);
        Serial.println("\nUser mengirim perintah 'Lampu 1' \nSaat ini Lampu 1 dalam keadaan OFF \n");
      }
    }
    else if (msg.text.equalsIgnoreCase("Lampu 2")) {
      if (Lampu_2 == HIGH) {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 2 dalam keadaan ON\nApakah anda ingin mematikan Lampu 2?", TbLp2off);
        Serial.println("\nUser mengirim perintah 'Lampu 2' \nSaat ini Lampu 2 dalam keadaan ON \n");
      }
      else {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 2 dalam keadaan OFF\nApakah anda ingin menyalakan Lampu 2?", TbLp2on);
        Serial.println("\nUser mengirim perintah 'Lampu 2' \nSaat ini Lampu 2 dalam keadaan OFF \n");
      }
    }
    else if (msg.text.equalsIgnoreCase("Lampu 3")) {
      if (Lampu_3 == HIGH) {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 3 dalam keadaan ON\nApakah anda ingin mematikan Lampu 3?", TbLp3off);
        Serial.println("\nUser mengirim perintah 'Lampu 3' \nSaat ini Lampu 3 dalam keadaan ON \n");
      }
      else {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 3 dalam keadaan OFF\nApakah anda ingin menyalakan Lampu 3?", TbLp3on);
        Serial.println("\nUser mengirim perintah 'Lampu 3' \nSaat ini Lampu 3 dalam keadaan OFF \n");
      }
    }
    else if (msg.text.equalsIgnoreCase("Lampu 4")) {
      if (Lampu_4 == HIGH) {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 4 dalam keadaan ON\nApakah anda ingin mematikan Lampu 4?", TbLp4off);
        Serial.println("\nUser mengirim perintah 'Lampu 1' \nSaat ini Lampu 1 dalam keadaan ON \n");
      }
      else {
        myBot.sendMessage(msg.sender.id, "Saat ini Lampu 4 dalam keadaan OFF\nApakah anda ingin menyalakan Lampu 4?", TbLp4on);
        Serial.println("\nUser mengirim perintah 'Lampu 4' \nSaat ini Lampu 4 dalam keadaan OFF \n");
      }
    }
    else if (msg.text.equalsIgnoreCase("Semua Lampu ON")) {
      myBot.sendMessage(msg.sender.id, "Apakah anda ingin menyalakan semua lampu?", TbLpAllon);
      Serial.println("\nUser ingin menyalakan semua lampu\n");
    }
    else if (msg.text.equalsIgnoreCase("Semua Lampu OFF")) {
      myBot.sendMessage(msg.sender.id, "Apakah anda ingin mematikan semua lampu?", TbLpAlloff);
      Serial.println("\nUser ingin mematikan semua lampu\n");
    }
    else if (msg.text.equalsIgnoreCase("Cek Status")) {
      if(Lampu_1 == LOW) {
        Status_Lampu_1 = "Lampu 1 OFF";
      }
      else {
        Status_Lampu_1 = "Lampu 1 ON";
      }
      if(Lampu_2 == LOW) {
        Status_Lampu_2 = "Lampu 2 OFF";
      }
      else {
        Status_Lampu_2 = "Lampu 2 ON";
      }
      if(Lampu_3 == LOW) {
        Status_Lampu_3 = "Lampu 3 OFF";
      }
      else {
        Status_Lampu_3 = "Lampu 3 ON";
      }
      if(Lampu_4 == LOW) {
        Status_Lampu_4 = "Lampu 4 OFF";
      }
      else {
        Status_Lampu_4 = "Lampu 4 ON";
      }
      Serial.println("\nUser mengirim perintah 'Cek Status'\n");
      myBot.sendMessage(msg.sender.id, "Status saat ini : \n\n👉 " + Status_Lampu_1 + "\n\n👉 " + Status_Lampu_2 + "\n\n👉 " + Status_Lampu_3 +
      "\n\n👉 " + Status_Lampu_4 + "\n\nGunakan tombol dibawah untuk mengontrol lampu 👇", Tbl);
      Serial.println("\nStatus saat ini : \n\n👉 " + Status_Lampu_1 + "\n👉 " + Status_Lampu_2 + "\n👉 " + Status_Lampu_3 + "\n👉 " + Status_Lampu_4 + "\n");
    }
    else if (msg.messageType == CTBotMessageQuery) {
      if (msg.callbackQueryData.equals(LAMPU_1_ON)) {
        digitalWrite(Lampu1, HIGH);
        Lampu_1 = HIGH;
        myBot.sendMessage(msg.sender.id, "💡 Lampu 1 telah dinyalakan");
        Serial.println("\nUser menyalakan Lampu 1\n");
      }
      else if (msg.callbackQueryData.equals(LAMPU_1_OFF)) {
        digitalWrite(Lampu1, LOW);
        Lampu_1 = LOW;
        myBot.sendMessage(msg.sender.id, "🚫 Lampu 1 telah dimatikan");
        Serial.println("\nUser telah mematikan Lampu 1");
      }
      else if (msg.callbackQueryData.equals(LAMPU_2_ON)) {
        digitalWrite(Lampu2, HIGH);
        Lampu_2 = HIGH;
        myBot.sendMessage(msg.sender.id, "💡 Lampu 2 telah dinyalakan");
        Serial.println("\nUser menyalakan Lampu 2\n");
      }
      else if (msg.callbackQueryData.equals(LAMPU_2_OFF)) {
        digitalWrite(Lampu2, LOW);
        Lampu_2 = LOW;
        myBot.sendMessage(msg.sender.id, "🚫 Lampu 2 telah dimatikan");
        Serial.println("\nUser telah mematikan Lampu 2");
      }
      else if (msg.callbackQueryData.equals(LAMPU_2_ON)) {
        digitalWrite(Lampu3, HIGH);
        Lampu_3 = HIGH;
        myBot.sendMessage(msg.sender.id, "💡 Lampu 3 telah dinyalakan");
        Serial.println("\nUser menyalakan Lampu 3\n");
      }
      else if (msg.callbackQueryData.equals(LAMPU_2_OFF)) {
        digitalWrite(Lampu3, LOW);
        Lampu_3 = LOW;
        myBot.sendMessage(msg.sender.id, "🚫 Lampu 3 telah dimatikan");
        Serial.println("\nUser telah mematikan Lampu 3");
      }
      else if (msg.callbackQueryData.equals(LAMPU_4_ON)) {
        digitalWrite(Lampu4, HIGH);
        Lampu_4 = HIGH;
        myBot.sendMessage(msg.sender.id, "💡 Lampu 4 telah dinyalakan");
        Serial.println("\nUser menyalakan Lampu 4\n");
      }
      else if (msg.callbackQueryData.equals(LAMPU_4_OFF)) {
        digitalWrite(Lampu4, LOW);
        Lampu_4 = LOW;
        myBot.sendMessage(msg.sender.id, "🚫 Lampu 4 telah dimatikan");
        Serial.println("\nUser telah mematikan Lampu 4");
      }
      else if (msg.callbackQueryData.equals(SEMUA_LAMPU_ON)) {
        digitalWrite(Lampu1, HIGH);
        digitalWrite(Lampu2, HIGH);
        digitalWrite(Lampu3, HIGH);
        digitalWrite(Lampu4, HIGH);
        Lampu_1 = HIGH;
        Lampu_2 = HIGH;
        Lampu_3 = HIGH;
        Lampu_4 = HIGH;
        myBot.sendMessage(msg.sender.id, "Semua 💡💡💡💡 Lampu telah dinyalakan");
        Serial.println("\nUser telah menyalakan semua Lampu\n");
      }
      else if (msg.callbackQueryData.equals(SEMUA_LAMPU_OFF)) {
        digitalWrite(Lampu1, LOW);
        digitalWrite(Lampu2, LOW);
        digitalWrite(Lampu3, LOW);
        digitalWrite(Lampu4, LOW);
        Lampu_1 = LOW;
        Lampu_2 = LOW;
        Lampu_3 = LOW;
        Lampu_4 = LOW;
        myBot.sendMessage(msg.sender.id, "Semua 🚫 Lampu telah dimatikan");
        Serial.println("\nUser telah mematikan semua Lampu\n");
      }
      else if (msg.callbackQueryData.equals(TIDAK)) {
        myBot.sendMessage(msg.sender.id, "❌ Perintah telah dibatalkan!");
        Serial.println("\nUser telah membatalkan perintah\n");
      }
    }
    else {
      myBot.sendMessage(msg.sender.id, "⛔ ERROR: Perintah tidak dikenal?!\n\nGunakan tombol dibawah untuk mengontrol lampu👇", Tbl);
      Serial.println("\nUser mengirim perintah yang tidak dikenal\n");
    }
  }
  delay(500);
}