#include "ntp.h"


static const char ntpServerName[] = "us.pool.ntp.org";
// const int timeZone = 2;
// unsigned int localPort = 8888; // local port to listen for UDP packets
const char *ssid = "iot";
const char *password = "Rijnstraat214";
// const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
// byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets
// const unsigned int remotePort = 123;

bool printed = false;
bool wifiConnected = false;



// WiFiUDP Udp;


// bool timeUpdated()
// {
//   return _timeupdated;
// }

void initWifi()
{
  log_i("init wifi");
  WiFi.begin(ssid, password);
}

void initNTP()
{
  log_i("init ntp");
  NTP.setTimeZone(TZ_Etc_UTC);
  NTP.begin();
  // Udp.begin(localPort);
}

bool getWifiStatus()
{
  wifiConnected = WiFi.status() == WL_CONNECTED;
  
  if(!printed && wifiConnected)
  {
    Serial.print("IP number assigned by DHCP is ");
    Serial.println(WiFi.localIP());
    printed = true;
  }
  return wifiConnected;
}


// // send an NTP request to the time server at the given address
// void sendNTPpacket(IPAddress &address)
// {
//   // set all bytes in the buffer to 0
//   memset(packetBuffer, 0, NTP_PACKET_SIZE);
//   // Initialize values needed to form NTP request
//   // (see URL above for details on the packets)
//   packetBuffer[0] = 0b11100011; // LI, Version, Mode
//   packetBuffer[1] = 0;          // Stratum, or type of clock
//   packetBuffer[2] = 6;          // Polling Interval
//   packetBuffer[3] = 0xEC;       // Peer Clock Precision
//   // 8 bytes of zero for Root Delay & Root Dispersion
//   packetBuffer[12] = 49;
//   packetBuffer[13] = 0x4E;
//   packetBuffer[14] = 49;
//   packetBuffer[15] = 52;
//   // all NTP fields have been given values, now
//   // you can send a packet requesting a timestamp:
//   Udp.beginPacket(address, 123); // NTP requests are to port 123
//   Udp.write(packetBuffer, NTP_PACKET_SIZE);
//   Udp.endPacket();
// }

time_t getNtpTime()
{
  static int last = 0;

  if ((millis () - last) > 1000) {
      last = millis ();
      Serial.println (NTP.getTimeDateStringUs ());
  }

  return NTP.getLastNTPSync();
//   IPAddress ntpServerIP; // NTP server's ip address

//   while (Udp.parsePacket() > 0)
//     ; // discard any previously received packets
//   Serial.println("Transmit NTP Request");
//   // get a random server from the pool
//   WiFi.hostByName(ntpServerName, ntpServerIP);
//   Serial.print(ntpServerName);
//   Serial.print(": ");
//   Serial.println(ntpServerIP);
//   sendNTPpacket(ntpServerIP);
//   uint32_t beginWait = millis();
//   while (millis() - beginWait < 3000)
//   {
//     int size = Udp.parsePacket();
//     if (size >= NTP_PACKET_SIZE)
//     {
//       Serial.printf("Receive NTP Response in %dms \n",(millis() - beginWait));
//       Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer
//       unsigned long secsSince1900;
//       // convert four bytes starting at location 40 to a long integer
//       secsSince1900 = (unsigned long)packetBuffer[40] << 24;
//       secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
//       secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
//       secsSince1900 |= (unsigned long)packetBuffer[43];
//       return secsSince1900 - 2208988800UL * SECS_PER_HOUR;
//     }
//   }
//   Serial.println("No NTP Response :-(");
//   return 0; // return 0 if unable to get the time
}
