#include <Arduino.h>
#include <EEPROM.h>
#include "Variables.h"

void setup() {
  Serial.begin(115200);
  pinMode(BUTTON1, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(BUTTON3, INPUT_PULLUP);
  pinMode(BUTTON4, INPUT_PULLUP);
  pinMode(BUTTON5, INPUT_PULLUP);

  pinMode(RELAY1_PIN, OUTPUT);
  pinMode(RELAY2_PIN, OUTPUT);
  pinMode(RELAY3_PIN, OUTPUT);
  pinMode(RELAY4_PIN, OUTPUT);
  pinMode(RELAY5_PIN, OUTPUT);

  pinMode(LEARN_LED_PIN, OUTPUT);
}

void loop() {
  handleButtons();
  if (learn_mode_enable) {
    blinkLearnLED();
    if (program_slot == 0) {
      if (button1_pressed) {
        program_slot = 1;
        Serial.println("Slot 1 is selected!");
        button1_pressed = false;
      } else if (button2_pressed) {
        program_slot = 2;
        Serial.println("Slot 2 is selected!");
        button2_pressed = false;
      } else if (button3_pressed) {
        program_slot = 3;
        Serial.println("Slot 3 is selected!");
        button3_pressed = false;
      } else if (button4_pressed) {
        program_slot = 4;
        Serial.println("Slot 4 is selected!");
        button4_pressed = false;
      } else if (button5_pressed) {
        program_slot = 5;
        Serial.println("Slot 5 is selected!");
        button5_pressed = false;
      }
    } else {
      if (both_button_pressed) {
        if (program_slot != 0) {
          saveRelayChanges(program_slot);
          Serial.println("Slot configuration is saved!");
        }
        program_slot = 0;
        learn_mode_enable = false;

        relay1_status = false;
        relay2_status = false;
        relay3_status = false;
        relay4_status = false;
        relay5_status = false;

        digitalWrite(LEARN_LED_PIN, LOW);
        both_button_pressed = false;
      }

      if (button1_pressed) {
        relay1_status = changeRelayState(RELAY1_PIN);
        button1_pressed = false;
      } else if (button2_pressed) {
        relay2_status = changeRelayState(RELAY2_PIN);
        button2_pressed = false;
      } else if (button3_pressed) {
        relay3_status = changeRelayState(RELAY3_PIN);
        button3_pressed = false;
      } else if (button4_pressed) {
        relay4_status = changeRelayState(RELAY4_PIN);
        button4_pressed = false;
      } else if (button5_pressed) {
        relay5_status = changeRelayState(RELAY5_PIN);
        button5_pressed = false;
      }
    }
    if (both_button_pressed) {
      turnOffAll();
      digitalWrite(LEARN_LED_PIN, LOW);
      learn_mode_enable = false;
      both_button_pressed = false;
      Serial.println("learn mode off");
    }
  } else {
    if (both_button_pressed) {
      turnOffAll();
      learn_mode_enable = true;
      both_button_pressed = false;
      Serial.println("learn mode on");
    }

    if (button1_pressed) {
      loadRelayChanges(1);
      Serial.println("Configures loaded for slot 1");
      button1_pressed = false;
    } else if (button2_pressed) {
      loadRelayChanges(2);
      Serial.println("Configures loaded for slot 2");
      button2_pressed = false;
    } else if (button3_pressed) {
      loadRelayChanges(3);
      Serial.println("Configures loaded for slot 3");
      button3_pressed = false;
    } else if (button4_pressed) {
      loadRelayChanges(4);
      Serial.println("Configures loaded for slot 4");
      button4_pressed = false;
    } else if (button5_pressed) {
      loadRelayChanges(5);
      Serial.println("Configures loaded for slot 5");
      button5_pressed = false;
    }
  }
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
led6:A
led6:C
NOCOMNCVCCGNDINLED1PWRRelay Module
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay3:VCC
relay3:GND
relay3:IN
relay3:NC
relay3:COM
relay3:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay4:VCC
relay4:GND
relay4:IN
relay4:NC
relay4:COM
relay4:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay5:VCC
relay5:GND
relay5:IN
relay5:NC
relay5:COM
relay5:NO
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r6:1
r6:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
sw1:1
sw1:2
sw1:3
sw2:1
sw2:2
sw2:3
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
Button 1
Button 2
Button 3
Button 4
Button 5
Relay 1
Relay 2
Relay 3
Relay 4
Relay 5
Button 1 & Button 3
Button 1 Connector Switch
Button 2 Connector Switch
Learn LED