#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include "RTClib.h"

#define PIN 6 // Pinnen vi bruker til Neopixlene
#define NUMPIXELS 77 // Antall neopixler på en hel sirkel

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
RTC_DS1307 rtc;

struct timePlan {
  byte ukedag;              // Mandag = 1 --> fredag = 5
  String startTid;          // (tt:mm) f.eks. "08:10"
  byte varighet;            // (minutt)
  byte fag;                 // 0 = Ingenting 
                            // 1 = Friminutt 
                            // 2 = El- kretser og nettverk
                            // 3 = Energi og styresystemer 
                            // 4 = Norsk
                            // 5 = Engelsk
                            // 6 = Matte
                            // 7 = Naturfag
                            // 10 = Gym
};

timePlan plan[40];

void fyllPlan() {
  // Mandag
  plan[0] = {1, "08:10", 45, 2}; 
  plan[1] = {1, "08:55", 45, 3}; 
  plan[2] = {1, "09:40", 20, 1}; 
  plan[3] = {1, "10:00", 90, 4}; 
  plan[4] = {1, "11:30", 30, 1}; 
  plan[5] = {1, "12:00", 90, 10}; 
  plan[6] = {1, "13:30", 10, 1}; 
  plan[7] = {1, "13:40", 90, 5};  

  // Tirsdag 
  plan[8] = {2, "08:10", 90, 6}; 
  plan[9] = {2, "09:40", 20, 1}; 
  plan[10] = {2, "10:00", 90, 3}; 
  plan[11] = {2, "11:30", 30, 1}; 
  plan[12] = {2, "12:00", 90, 3}; 
  plan[13] = {2, "13:30", 10, 1}; 
  plan[14] = {2, "13:40", 45, 3}; 

  // Onsdag 
  plan[15] = {3, "08:10", 90, 6}; 
  plan[16] = {3, "09:40", 20, 1}; 
  plan[17] = {3, "10:00", 45, 6}; 
  plan[18] = {3, "10:45", 90, 4};  

  // Torsdag 
  plan[19] = {4, "08:10", 90, 2};  
  plan[20] = {4, "09:40", 20, 1};  
  plan[21] = {4, "10:00", 90, 2};  
  plan[22] = {4, "11:30", 30, 1};  
  plan[23] = {4, "12:00", 45, 2};  
  plan[24] = {4, "12:45", 45, 5};  
  plan[25] = {4, "13:30", 10, 1};  
  plan[26] = {4, "13:40", 90, 2};  
  plan[27] = {4, "08:10", 90, 2}; 

  // Fredag 
  plan[28] = {5, "08:55", 45, 2}; 
  plan[29] = {5, "09:40", 20, 1}; 
  plan[30] = {5, "10:00", 90, 3}; 
  plan[31] = {5, "11:30", 30, 1}; 
  plan[32] = {5, "12:00", 90, 3}; 
  plan[33] = {5, "13:30", 10, 1}; 
  plan[34] = {5, "13:40", 90, 7}; 

}
//                 ******  DEMOFUNKSJON!  ******
void klokke(int tim, int min, int sek){
  int minuttsiden = tim * 60 + min;  // Antall minutter siden kl. 12 eller 00
  int sekunditimen = min * 60 + sek; // Antall sekunder siden sist hele time
  
   // Sett timeviser
  int timePixel = map(minuttsiden, 0, 719, 0, NUMPIXELS - 1); //60min x 12tim = 720min
  strip.setPixelColor(timePixel, strip.Color(0, 255, 0)); // Grønn pixel som viser timehånden

  // Sett minuttviser
  int minuttPixel = map(sekunditimen, 0, 3599, 0, NUMPIXELS - 1);
  strip.setPixelColor(minuttPixel, strip.Color(255, 0, 0)); // Rød pixel som viser minutthånden
}
//                 ******  DEMOFUNKSJON!  ******

void setup() {
  Serial.begin(115200);
  strip.begin();
  strip.show(); // Setter alle pixlene til 'AV'
  if (!rtc.begin()) {
    Serial.println("Finner ikke klokken!");
    while (1);
  }
  if (!rtc.isrunning()) {
    Serial.println("Klokken er feil!");
  }

  fyllPlan(); // Fyller timeplanen inni timePLan.h

}

void loop() {
  DateTime now = rtc.now();
  
  int timer = now.hour() % 12; // skifter fra 24 times visning til 12
  int minutt = now.minute();
  int sekund = now.second();
  strip.clear();

  klokke(timer, minutt, sekund); //Kjører klokkefunksjonen som er rett over void setup() Bare for demo!

  Serial.print("Klokken er: ");
  Serial.print(timer);
  Serial.print(":");
  Serial.println(minutt);
  delay(500);

  strip.show();
}
GND5VSDASCLSQWRTCDS1307+