#include <Wire.h>
#include <ST7032_asukiaaa.h>

ST7032_asukiaaa lcd;

// 🔹 Настройки пинов кнопок
const int PIN_S1 = 5;  // Кнопка для LED 1
const int PIN_S2 = 18; // Кнопка для LED 2

// 🔹 Настройки пинов светодиодов НА ESP32
const int PIN_LED1_ESP32 = 13; 
const int PIN_LED2_ESP32 = 23;

// 🔹 Состояния светодиодов (false = OFF, true = ON)
bool led1_state = false;
bool led2_state = false;


void setup() {
  // Инициализация LCD
  // Инициализация I2C Master
  Wire.begin(); 

  // Настройка кнопок (вход с подтяжкой к плюсу)
  pinMode(PIN_S1, INPUT_PULLUP);
  pinMode(PIN_S2, INPUT_PULLUP);

  // Настройка светодиодов на выход
  pinMode(PIN_LED1_ESP32, OUTPUT);
  pinMode(PIN_LED2_ESP32, OUTPUT);
  
  // Выключаем их при старте
  digitalWrite(PIN_LED1_ESP32, LOW);
  digitalWrite(PIN_LED2_ESP32, LOW);
}

// Функция отправки команды на Arduino И управления локальным LED
void sendCommand(const char* message, int ledPin, bool state) {
  // 1. Отправляем данные по I2C на Arduino
  Wire.beginTransmission(8); // Адрес Arduino UNO
  Wire.write((const uint8_t*)message, strlen(message)); 
  Wire.endTransmission();    
  
  // 2. Управляем светодиодом на самом ESP32
  digitalWrite(ledPin, state ? HIGH : LOW);

}

void loop() {
  // 🔹 Обработка кнопки S1
  if (digitalRead(PIN_S1) == LOW) {
    delay(200);
    if (digitalRead(PIN_S1) == LOW) {
      led1_state = !led1_state;
      
      // Управление пином (если нужно)
      digitalWrite(PIN_LED1_ESP32, led1_state ? HIGH : LOW);

      while (digitalRead(PIN_S1) == LOW) delay(10);
      
      checkAndSendStatus(); // Проверяем общее состояние
    }
  }

  // 🔹 Обработка кнопки S2
  if (digitalRead(PIN_S2) == LOW) {
    delay(200);
    if (digitalRead(PIN_S2) == LOW) {
      led2_state = !led2_state;
      
      // Управление пином (если нужно)
      digitalWrite(PIN_LED2_ESP32, led2_state ? HIGH : LOW);

      while (digitalRead(PIN_S2) == LOW) delay(10);
      
      checkAndSendStatus(); // Проверяем общее состояние
    }
  }
}

// Новая вспомогательная функция
void checkAndSendStatus() {
  if (led1_state && led2_state) {
    // Оба включены
    sendCommand("LEDS_ON", -1, true);
  } 
  else if (!led1_state && !led2_state) {
    // Оба выключены
    sendCommand("LEDS_OFF", -1, false);
  } 
  else {
    // Включен только один. 
    // Если нужно отправлять и индивидуальные команды в этом случае:
    if (led1_state) {
       sendCommand("LED_1_ON", PIN_LED1_ESP32, true);
    } else {
       sendCommand("LED_2_ON", PIN_LED2_ESP32, true);
    }
  }
}