
#include <WiFiUdp.h>
#include <NTPClient.h>
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
  


#define ledR  14
#define ledG  12
#define ledB  15

String currentDate;

int diai, mesi, anoi;
int diaf, mesf, anof;
  
//Week Days
String weekDays[7]={"Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"};
//Month names
String months[12]={"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};




void pegahora(){
 timeClient.update();

  time_t epochTime = timeClient.getEpochTime();
  Serial.print("Epoch Time: ");
  Serial.println(epochTime);
  
  String formattedTime = timeClient.getFormattedTime();
  Serial.print("Formatted Time: ");
  Serial.println(formattedTime);  

  int currentHour = timeClient.getHours();
  Serial.print("Hour: ");
  Serial.print(currentHour);  

  int currentMinute = timeClient.getMinutes();
  Serial.print(" - Minutes: ");
  Serial.print(currentMinute); 
   
  int currentSecond = timeClient.getSeconds();
  Serial.print(" - Seconds: ");
  Serial.println(currentSecond);  

  String weekDay = weekDays[timeClient.getDay()];
  Serial.print("Week Day: ");
  Serial.println(weekDay);    

  //Get a time structure
  struct tm *ptm = gmtime ((time_t *)&epochTime); 

  int monthDay = ptm->tm_mday;
  Serial.print("Month day: ");
  Serial.print(monthDay);

  int currentMonth = ptm->tm_mon+1;
  Serial.print(" - Month: ");
  Serial.print(currentMonth);

  String currentMonthName = months[currentMonth-1];
  Serial.print(" - Month name: ");
  Serial.println(currentMonthName);

  int currentYear = ptm->tm_year+1900;
  Serial.print("Year: ");
  Serial.println(currentYear);

  //Print complete date:
  currentDate = String(currentYear) + "-" + String(currentMonth) + "-" + String(monthDay);
  Serial.print("Current date: ");
  Serial.println(currentDate);  
  }


// ############### OBJECTS ################# //


void setup() {

  pinMode(ledR,OUTPUT);  pinMode(ledG,OUTPUT);  pinMode(ledB,OUTPUT);

  // Initialize a NTPClient to get time
  timeClient.begin();
  // Set offset time in seconds to adjust for your timezone, for example:
  // GMT +1 = 3600
  // GMT +8 = 28800
  // GMT -1 = -3600
  // GMT 0 = 0
  timeClient.setTimeOffset(-3600);
  
}




void showLetters(int printStart, int startLetter)
{
  lcd.setCursor(printStart,0);
  for (int currentLetter = startLetter; currentLetter < linhaum.length(); currentLetter++)
  {
    lcd.print(linhaum[currentLetter]);
  } 
  lcd.print(" ");
  
  lcd.setCursor(printStart,1);
  for (int currentLetter = startLetter; currentLetter < linhadois.length(); currentLetter++)
  {
    lcd.print(linhadois[currentLetter]);
  } 

  lcd.print(" ");
  delay(250); 
  
}

void loop() {

  // Acessa os campos

  String datainicial=painel["datainicial"].as<String>();  
  String datafinal=painel["datafinal"].as<String>();  

  // Mostra no Display
  for (int letter = 1; letter <= t1; letter++)  //scroll off to left
  {    showLetters(0, letter);  }
  
  // Mostra no LED RGB
  analogWrite(ledR,ledr);
  analogWrite(ledG,ledg);
  analogWrite(ledB,ledb);
  
  // Mostra no Serial

  Serial.print("Data inicial: ");  Serial.println(datainicial);  
  sscanf(datainicial.c_str(), "%d/%d/%d", &anoi, &mesi, &diai);  
  Serial.print("Dia: "); Serial.print(diai);Serial.print("Mês: "); Serial.print(mesi);Serial.print("Ano: "); Serial.println(anoi);
  Serial.print("Data final: ");  Serial.println(datafinal);  
  sscanf(datafinal.c_str(), "%d/%d/%d", &diaf, &mesf, &anof);  

  pegahora();
  Serial.print("Server date: ");
  Serial.println(currentDate);  
  
  delay(5000);
}