#ifndef Terros10_HEADERGUARD
#define Terros10_HEADERGUARD

#include "../espnow/Message.hpp"
#include "ADS1115_WE.h"
#include "ForteSensor.hpp"
#include "Definitions.h"
#include "esp_log.h"
#include <Wire.h>

class TEROS10 : public ForteSensor<Measurement> {
public:
    void setup() override;

    Measurement readData() override;

    void setVoltageRange(ADS1115_RANGE newVoltageRange);

    void setChannel(ADS1115_MUX newChannel);

    std::list<Message> buildMessages() override;

    [[nodiscard]] SensorInformation getSensorInformation() const override;

    TEROS10(ADS1115_MUX channel, ADS1115_RANGE voltageRange);

    TEROS10(ADS1115_MUX channel, ADS1115_RANGE voltageRange, uint8_t address);

private:

    float readChannel(ADS1115_MUX compareChannel);
    ADS1115_WE ads;
    const SensorInformation sensorInformation{HardwareName::TEROS10, SensorProtocol::Analog};
    ADS1115_MUX channel;
    ADS1115_RANGE voltageRange = ADS1115_RANGE::ADS1115_RANGE_4096;
    bool sensorConnected = false;
};

#endif