#include "USB.h"
#include "USBHIDKeyboard.h"

USBHIDKeyboard Keyboard;

const int BUTTON_PIN = 2;
const int LED_PIN = 3;
const unsigned long DEBOUNCE_MS = 25;
const unsigned long BLINK_ON_MS = 60;
const unsigned long BLINK_OFF_MS = 60;

bool lastReading = HIGH;
bool buttonState = HIGH;
unsigned long lastDebounceTime = 0;

bool blinking = false;
int blinkStep = 0;
unsigned long blinkTimer = 0;

void startBlink() {
  blinking = true;
  blinkStep = 0;
  blinkTimer = millis();
  digitalWrite(LED_PIN, HIGH);   // standard LED: HIGH = on
}

void updateBlink() {
  if (!blinking) return;
  unsigned long elapsed = millis() - blinkTimer;
  unsigned long stepDuration = (blinkStep % 2 == 0) ? BLINK_ON_MS : BLINK_OFF_MS;

  if (elapsed >= stepDuration) {
    blinkStep++;
    blinkTimer = millis();
    if (blinkStep >= 4) {
      blinking = false;
      digitalWrite(LED_PIN, LOW);
    } else {
      digitalWrite(LED_PIN, blinkStep % 2 == 0 ? HIGH : LOW);
    }
  }
}

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  Keyboard.begin();
  USB.begin();
}

void loop() {
  bool reading = digitalRead(BUTTON_PIN);

  if (reading != lastReading) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > DEBOUNCE_MS) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW) {
        Keyboard.press(' ');
        Keyboard.release(' ');
        startBlink();
      }
    }
  }

  updateBlink();
  lastReading = reading;
}