/*
NetworkFunctions.cpp
Inkplate Arduino library
David Zovko, Borna Biro, Denis Vajak, Zvonimir Haramustek 
September 24, 2020
https://github.com/e-radionicacom/Inkplate-6-Arduino-library

For more info about the product, please check: https://docs.soldered.com/inkplate/

This code is released under the GNU Lesser General Public License v3.0: https://www.gnu.org/licenses/lgpl-3.0.en.html
Please review the LICENSE file included with this example.
If you have any questions about licensing, please contact assistance@soldered.com
Distributed as-is; no warranty is given.
*/

#include "NetworkFunctions.h"

#include <HTTPClient.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>

#include "Inkplate.h"

void NetworkFunctions::begin(char *ssid, char *pass)
{
    // Initiating wifi, like in BasicHttpClient example
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, pass);

    int cnt = 0;
    Serial.print(F("Waiting for WiFi to connect..."));
    while ((WiFi.status() != WL_CONNECTED))
    {
        Serial.print(F("."));
        delay(1000);
        ++cnt;

        if (cnt == 20)
        {
            Serial.println("Can't connect to WIFI, restarting");
            delay(100);
            ESP.restart();
        }
    }
    Serial.println(F(" connected"));

    // Get Internet time from NTP.
    setTime();
}

// Get time from NTP server
void NetworkFunctions::getTime(tm *t, int timeZone)
{
    // Get seconds since 1.1.1970.
    time_t nowSecs = time(nullptr) + timeZone * 3600ULL;

    // Used to store time
    struct tm timeinfo;
    gmtime_r(&nowSecs, t);

}

// Function for initial time setting ovet the ntp server
void NetworkFunctions::setTime()
{
    // Used for setting correct time
    configTime(0, 0, "pool.ntp.org", "time.nist.gov");

    Serial.print(F("Waiting for NTP time sync: "));
    time_t nowSecs = time(nullptr);
    while (nowSecs < 8 * 3600 * 2)
    {
        delay(500);
        Serial.print(F("."));
        yield();
        nowSecs = time(nullptr);
    }

    Serial.println();

    // Used to store time info
    struct tm timeinfo;
    gmtime_r(&nowSecs, &timeinfo);

    Serial.print(F("Current time: "));
    Serial.print(asctime(&timeinfo));
}
