const int buttonPin = 2;    // a nyomógomb lába
const int outputPin = 3;    // a kimenet lába 15 másodpercenként váltakozik, mikor fut a program
const int led60Pin = 4;     // 60 perces LED lába
const int led90Pin = 5;     // 90 perces LED lába
const int led120Pin = 6;    // 120 perces LED lába
const int startEndPin = 7;  // kezdet és vég LED lába, program futása alatt HIGH
const int togglePin = 8;    // lábon kapcsolás LED lába - amíg áram alatt van a modul, addig HIGH

int buttonState = 0;
int previousButtonState = 0;
int timerValue = 30;
unsigned long previousMillis = 0;
unsigned long ledToggleMillis = 0; // Utolsó LED be- vagy kikapcsolás ideje
bool outputActive = false;
bool programStarted = false; // Jelzi, hogy elindult-e a program

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(outputPin, OUTPUT);
  pinMode(led60Pin, OUTPUT);
  pinMode(led90Pin, OUTPUT);
  pinMode(led120Pin, OUTPUT);
  pinMode(startEndPin, OUTPUT);
  pinMode(togglePin, OUTPUT);
  
  // Alapállapotban a togglePin LED-je be van kapcsolva
  digitalWrite(togglePin, HIGH);
}

void loop() {
  unsigned long currentMillis = millis();
  
  // Nyomógomb állapotának leolvasása
  buttonState = digitalRead(buttonPin);

  // Nyomógomb állapotának ellenőrzése
  if (buttonState != previousButtonState) {
    if (buttonState == HIGH) {
      timerValue += 30;
      if (timerValue > 120) {
        timerValue = 60; // Ha már 120 percnél többet választott, visszaállítjuk 60 percre
      }
    }
    // Kis várakozás a debounce miatt
    delay(500);
  }

  // Nyomógomb állapotának frissítése
  previousButtonState = buttonState;

  // Kimenet be- vagy kikapcsolása az időzítés alapján
  if (currentMillis - previousMillis >= timerValue * 60000 && outputActive) {
    digitalWrite(outputPin, LOW);  // Kikapcsoljuk a kimenetet
    digitalWrite(startEndPin, LOW); // Kikapcsoljuk a kezdet és vég LED-eket
    digitalWrite(led60Pin, LOW); // Minden LED kikapcsolása
    digitalWrite(led90Pin, LOW);
    digitalWrite(led120Pin, LOW);
    outputActive = false;
    programStarted = false; // A program leállt, visszaállítjuk a jelzőt

  } else if (buttonState == HIGH && !outputActive) {
    digitalWrite(outputPin, HIGH); // Bekapcsoljuk a kimenetet
    digitalWrite(startEndPin, HIGH); // Bekapcsoljuk a kezdet és vég LED-eket
    outputActive = true;
    programStarted = true; // A program elindult
  }

  // LED-ek beállítása az időzítés szerint, csak ha a program elindult
  if (programStarted) {
    if (timerValue == 60) {
      digitalWrite(led60Pin, HIGH);
      digitalWrite(led90Pin, LOW);
      digitalWrite(led120Pin, LOW);
    } else if (timerValue == 90) {
      digitalWrite(led60Pin, LOW);
      digitalWrite(led90Pin, HIGH);
      digitalWrite(led120Pin, LOW);
    } else if (timerValue == 120) {
      digitalWrite(led60Pin, LOW);
      digitalWrite(led90Pin, LOW);
      digitalWrite(led120Pin, HIGH);
    }
  } else {
    // Ha a program nem indult el, akkor minden LED kikapcsolása
    digitalWrite(led60Pin, LOW);
    digitalWrite(led90Pin, LOW);
    digitalWrite(led120Pin, LOW);
  }

  // D3 lábon 15 másodpercenként be- és kikapcsolgatás, csak ha a program elindult
  if (programStarted && currentMillis - ledToggleMillis >= 15000) {
    digitalWrite(outputPin, !digitalRead(outputPin));
    ledToggleMillis = currentMillis;
  }
}