#include <ESP8266WiFi.h>
#include "wifi_credentials.h"

WiFiClient espClient; // change to WiFiClientSecure for TLS/SSL

void setup_wifi() {
    delay(10);
    WiFi.disconnect(true);
    Serial.println("Starting WiFi setup...");

    // Start WiFi connection attempt
    WiFi.begin(wifiSSID, wifiPassword);

    // Set a timeout for the WiFi connection attempt
    unsigned long startTime = millis();
    unsigned long wifiTimeout = 30000;  // 30 seconds timeout

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");

        // Check connection status
        if (WiFi.status() == WL_CONNECT_FAILED) {
            Serial.println("Connection failed. Check your password and SSID.");
            break;
        }

        // Check for timeout
        if (millis() - startTime > wifiTimeout) {
            Serial.println("WiFi connection timed out. Check your network availability and signal strength.");
            break;
        }
    }

    // If connected, display the IP address
    if (WiFi.status() == WL_CONNECTED || WiFi.status() == 7) { // 7 == WL_GOT_IP
        Serial.println("");
        Serial.println("WiFi connected");
        Serial.println("WiFi status code: " + String(WiFi.status()));
        delay(1000);
        Serial.println("SSID: " + String(wifiSSID));
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());
    } else {
        // Print the status code for further troubleshooting
        Serial.println("Failed to connect. WiFi status code: " + String(WiFi.status()));
    }

    //espClient.setFingerprint(fingerprint);  // uncomment for TLS/SSL
}
