#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#include "TimerOne.h"

#include "Time.h"

#define SCREEN_WIDTH        128 // OLED display width, in pixels
#define SCREEN_HEIGHT        64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET            -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Time currentTime;
Time alarmTime;
bool alarmActive = false;



void setup() {
  Serial.begin(9600);
  // initialize and clear display
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.clearDisplay();
  // display.setTextSize(1);
  // display.setTextColor(WHITE);

  currentTime.setTime(12,0,0);
  alarmTime.setTime(12,0,0);

  Timer1.initialize(1000000); // Interrupt every 1 second
  Timer1.attachInterrupt(updateTime);

}

void loop() {

  display.clearDisplay();
  displayTime();
  displayAlarm();
  display.display();
  delay(100);
}

void displayTime() {
  // display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print("TIME:");
  display.setCursor(15, 20);
  display.print(currentTime.hours < 10 ? "0" : "");
  display.print(currentTime.hours);
  display.print(":");
  display.print(currentTime.minutes < 10 ? "0" : "");
  display.print(currentTime.minutes);
  display.print(":");
  display.print(currentTime.seconds < 10 ? "0" : "");
  display.print(currentTime.seconds);
  // display.display();
}


void displayAlarm() {
  // display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 40);
  display.print("ALARM:");
  display.setCursor(40, 50);
  display.print(alarmTime.hours < 10 ? "0" : "");
  display.print(alarmTime.hours);
  display.print(":");
  display.print(alarmTime.minutes < 10 ? "0" : "");
  display.print(alarmTime.minutes);
  display.print(":");
  display.print(alarmTime.seconds < 10 ? "0" : "");
  display.print(alarmTime.seconds);
  // display.display();
}


//ISR: Interrupt Service Routine:
void updateTime() {
  currentTime.incrementSeconds();
  //checkAlarm();
}