#include "ClockDisplay.h"

ClockDisplay::ClockDisplay() {
  Clear();
}

ClockDisplay::~ClockDisplay() {

}

boolean ClockDisplay::PixelOn(byte pixelIndex) {
  return leds[pixelIndex];
}

void ClockDisplay::ShowTime(time_t t) {
  byte numberIndex = 0; // 
  
  byte timme = hour(t);	// timme först
  byte number0 = timme / 10;
  byte number1 = timme % 10;
  
  byte minut = minute(t);	// minut sedan
  byte number2 = minut / 10;
  byte number3 = minut % 10;


  ShowNumber(number0, PIXELSPERCHAR * numberIndex++);
  ShowNumber(number1, PIXELSPERCHAR * numberIndex++);
  ShowNumber(number2, PIXELSPERCHAR * numberIndex++ + PIXELSPERSEGMENT); // +PIXELSPERSEGMENT because the colon is in between number 1 and 2
  ShowNumber(number3, PIXELSPERCHAR * numberIndex++ + PIXELSPERSEGMENT);

  ShowColon();

  FastLED.show();
}

void ClockDisplay::ShowNumber(uint8_t siffra, uint16_t startPixel) {
	for (byte segmentNr = 0; segmentNr < 7; segmentNr++) { // for each segment
		ShowSegment(startPixel, segmentNr, (NUMBERARRAY[siffra][segmentNr] > 0)); //
	}
}

void ClockDisplay::ShowSegment(uint16_t offset, byte segmentNr, boolean on) {
	for (byte i = 0; i < PIXELSPERSEGMENT; i++) { 
    leds[offset + segmentNr * PIXELSPERSEGMENT + i] = on;
	}
}

void ClockDisplay::ShowColon() {
  leds[COLONSTARTINDEX] = this->colonOn;
  leds[COLONSTARTINDEX + 1] = this->colonOn;
  this->colonOn = !this->colonOn;
}

void ClockDisplay::Clear() {
  for (byte i = 0; i < NUMPIXELS; i++) {
    leds[i] = false;
  }
}

