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

const char* ssid = "Wokwi-GUEST";
const char* password = ""; 
const char* testHostname = "www.google.com";  
IPAddress HostIP;  
unsigned int localPort = 80;  
const int RELAY_Pin = 0;               //Relay Pin

#define MINUTES (60L * 1000)
#define SECONDS  1000
const unsigned long  PROBE_DELAY = 30 * SECONDS;  
const unsigned long  RESET_DELAY = 10 * SECONDS;  
const unsigned long  RESET_PULSE = 30 * SECONDS;  
int  Nreset_events = 0;

enum {  
    TESTING_STATE=0, FAILURE_STATE=1, SUCCESS_STATE=2
};

int CurrentState = TESTING_STATE;


void setup() {  
    pinMode(RELAY_Pin, OUTPUT);

    Serial.begin(115200);
    delay(10);
    Serial.println( __FILE__ );
    delay(10);

    // Connecting to a WiFi network
    Serial.print(String("Connecting to ") + ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
        delay(500);
    }
    Serial.println("\nWiFi connected");
}

void reset_device() {  
    // keep track of number of resets
    Nreset_events++;
    Serial.println(String("\nDisconnected... resetting - ") + String(Nreset_events));
    digitalWrite(RELAY_Pin, HIGH);
    delay(RESET_PULSE);
    digitalWrite(RELAY_Pin, LOW);
}

void loop() {  
    switch (CurrentState) {

        case TESTING_STATE:
            if (!WiFi.hostByName(testHostname, HostIP)) {
                CurrentState = FAILURE_STATE;
            } else {
                CurrentState = SUCCESS_STATE;
            }
            break;

        case FAILURE_STATE:
            reset_device();
            delay(RESET_DELAY);
            CurrentState = TESTING_STATE;
            break;

        case SUCCESS_STATE:
            delay(PROBE_DELAY);
            CurrentState = TESTING_STATE;
            Serial.println("TESTARE STARE - OK");
            break;
    }
}