#include <WiFi.h>
#include "LCD_1602_RUS.h"

#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
#define BOT_TOKEN "6040632807:AAG8QHmaDlHUFftx4ELtBQVsjANOX2Cpzrk"
#define CHAT_ID "6164808768"

#include <FastBot.h>

FastBot bot(BOT_TOKEN);



//===============================================================================
int counter;                                  // Data counter
int totalColumns = 16;                       // number of colums pixels on the LCD
int totalRows = 2;                          // number of rows pixels on the LCD
const int delayTime = 2000;                 // delay time on between each iteration
const int scrolling_time = 250;           // Scrolling time of the test
//LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);  // Define the lcd object from the liduidCrystal class
LCD_1602_RUS lcd(0x27, totalColumns, totalRows);
String staticMessage = "Телеграм бот";
String scrollingMessage = "LCD1602!";


//=============================================================================
// The below function allow us to scroll a test and it is used to scroll the ouput of data of the sensor
void scrollMessage(int row, String message, int delayTime, int totalColumns) {
  for (int i = 0; i < totalColumns; i++) {
    message = message;
  }
  message = message + "   ";
  for (int position = 0; position < message.length(); position++) {
    lcd.setCursor(0, row);
    lcd.print(message.substring(position, position + totalColumns));
    delay(delayTime);
  }
}
//=================================================================================


void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  Serial.print("Connecting to WiFi");
  WiFi.begin("Wokwi-GUEST", "", 6);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println(" Connected!");


  // connectWiFi();
  bot.setChatID(CHAT_ID);

  // подключаем функцию-обработчик
  bot.attach(newMsg);

  // показать юзер меню (\t - горизонтальное разделение кнопок, \n - вертикальное
  bot.showMenu("Menu1 \t Menu2 \t Menu3 \n Close");
  lcd.print(staticMessage);      // print the static message
  scrollMessage(1, scrollingMessage, scrolling_time, totalColumns);
}

// обработчик сообщений
void newMsg(FB_msg& msg) {
  if (msg.text == "Close") bot.closeMenu();
  else Serial.println(msg.text);
  lcd.clear();
  delay(150);


 // lcd.setCursor(0, 1);
 // lcd.print(msg.text);
  //delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("от: " + msg.username);
  delay(1000);
  //lcd.clear();

  // lcd.setCursor(0, 1);
  // lcd.print(msg.text);
  // delay(500);
  lcd.setCursor(0, 1);
  String scrollingMessageHumidity = msg.text;
  scrollMessage(1, scrollingMessageHumidity, scrolling_time, totalColumns);
  lcd.clear();
  // Print he values of Temperature in Celsus
  // String scrollingMessageTemperature = msg.text;
  // scrollMessage(1, scrollingMessageTemperature, scrolling_time, totalColumns);
  // Print the values of temperature in Fahrenheit
  // String scrollingMessageTemperatureFahrenheit = msg.text;
  // scrollMessage(1, scrollingMessageTemperatureFahrenheit, scrolling_time, totalColumns);
  // // Распечатайте значения индекса тепла для обеих единиц.
  // String scrollingMessageHeatIndexCelsus = msg.text;
  // scrollMessage(1, scrollingMessageHeatIndexCelsus, scrolling_time, totalColumns);
  // String scrollingMessageHeatIndexFahrenheit = msg.text;
  // scrollMessage(1, scrollingMessageHeatIndexFahrenheit, scrolling_time, totalColumns);
  delay(delayTime);
  counter++;  // update the counbter
}

void loop() {
  bot.tick();   // тикаем в луп
  Serial.print(bot.tick());


}


void connectWiFi() {
  delay(2000);
  Serial.begin(115200);
  Serial.println();

  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    // if (millis() > 15000) ESP.restart();
  }
  Serial.println("Connected");
}



// // /* Hello Wokwi! */

// // #include <LiquidCrystal_I2C.h>

// // LiquidCrystal_I2C lcd(0x27, 20, 4);

// // void setup() {
// //   lcd.init();
// //   lcd.backlight();
// //   lcd.setCursor(1, 0);
// //   lcd.print("Hello, Wokwi!");
// // }

// // void loop() {
// //   lcd.setCursor(7, 1);
// //   lcd.print(millis() / 1000);
// // }



// #include "LCD_1602_RUS.h"


// LCD_1602_RUS lcd(0x27, 16, 2);

// void setup()
// {
//   lcd.init();                      // initialize the lcd
//   // Print a message to the LCD.
//   lcd.backlight();
//   lcd.setCursor(2, 0);
//   lcd.print(L"Теперь можно");
//   lcd.setCursor(3, 1);
//   lcd.print(L"по-русски");

// }

// void loop()
// {
// }