/// © MiroZ 2024

#ifndef __WIFI_H__
#define __WIFI_H__

#include <WiFi.h>
#include <esp_timer.h>
#include "Settings.h"
#include "TaskMgr.h"

#define _USE_TIMER

class Wifi
{
public:
	typedef enum
	{
		NOT_CONNECTED,
		PENDING,
		NOT_PROVISIONED,
		CONNECTED
	} WIFI_STATUS;

protected:
	uint8_t m_ignored[SETTINGS_NUM_WIFI_ENTRIES];
	WIFI_STATUS m_wifi_status = WIFI_STATUS::NOT_CONNECTED;

#ifdef USE_TIMER
	esp_timer_handle_t m_timer;
	static void timerCallback(void* arg);
#endif

	TaskHandle_t m_task = nullptr;
	void task();

	WIFI_STATUS startConnecting();
	WIFI_STATUS connectTo(int index);
	int scan();

public:
	Wifi();

protected:
	void wifi_event(arduino_event_id_t event, arduino_event_info_t info);

public:
	int start();
	WIFI_STATUS status() { return m_wifi_status; }
	WIFI_STATUS waitForConnection();
};

#endif /* __WIFI_H__ */