#ifndef WIFISENSORANDROID_H
#define WIFISENSORANDROID_H


#ifdef ANDROID

#include <QAndroidJniObject>

#include "../../misc/Debug.h"
#include "../WiFiSensor.h"

class WiFiSensorAndroid : public WiFiSensor {

private:

	/** hidden ctor. use singleton! */
	WiFiSensorAndroid() {;}

	bool started = false;

public:

	/** singleton access */
	static WiFiSensorAndroid& get() {
		static WiFiSensorAndroid wifi;
		return wifi;
	}

	void start() override {

		// start scanning
		int res = QAndroidJniObject::callStaticMethod<int>("indoor/java/WiFi", "start", "()I");
		if (res != 0) {throw Exception("error while starting WiFi");}
		started = true;

	}

	void stop() override {
		throw "todo";
	}

	bool isRunning() const override {
		return started;
	}

	/** called from java. handle the given incoming scan result */
	void handle(const std::string data) {

		// to-be-constructed sensor data
		WiFiMeasurements sensorData;

		// parse each mac->rssi entry
		for (int i = 0; i < (int)data.length(); i += 17+1+2) {
			const std::string bssid = data.substr(i, 17);
			const int8_t rssi = data[i+17];
			const int8_t pad1 = data[i+18];
			const int8_t pad2 = data[i+19];
			if (pad1 != 0 || pad2 != 0) {Debug::error("padding error within WiFi scan result");}
			sensorData.entries.push_back(WiFiMeasurement(AccessPoint(bssid), rssi));
		}

		// call listeners
		informListeners(sensorData);

	}

};




#endif

#endif // WIFISENSORANDROID_H
