#ifndef ORNO_MODBUS_H_
#define ORNO_MODBUS_H_

#include <stdbool.h>
#include "esp_err.h"


#include <stdint.h>
#include <stdbool.h>
#include "esp_err.h"

/**
 * @brief Inicializa o driver do medidor (SPI, mutex, registradores ADE7758).
 */
esp_err_t meter_init(void);

/**
 * @brief Inicia a tarefa de leitura de dados do medidor.
 */
esp_err_t meter_start(void);

/**
 * @brief Para a tarefa de leitura e limpa os dados internos.
 */
void meter_stop(void);

/**
 * @brief Verifica se o medidor está em execução.
 *
 * @return true se a tarefa estiver ativa, false caso contrário.
 */
bool meter_is_running(void);

/**
 * @brief Limpa os dados armazenados no medidor (zera todos os valores).
 */
void meter_clear_data(void);

// ----- Leituras por fase (L1, L2, L3) -----

// Tensão RMS (em volts)
float meter_get_vrms_l1(void);
float meter_get_vrms_l2(void);
float meter_get_vrms_l3(void);

// Corrente RMS (em amperes)
float meter_get_irms_l1(void);
float meter_get_irms_l2(void);
float meter_get_irms_l3(void);

// Potência ativa (W)
int meter_get_watt_l1(void);
int meter_get_watt_l2(void);
int meter_get_watt_l3(void);

// Potência reativa (VAR)
int meter_get_var_l1(void);
int meter_get_var_l2(void);
int meter_get_var_l3(void);

// Potência aparente (VA)
int meter_get_va_l1(void);
int meter_get_va_l2(void);
int meter_get_va_l3(void);

// (Opcional) contador de watchdog para diagnóstico
uint32_t meter_get_watchdog_counter(void);

#ifdef __cplusplus
}
#endif

#endif /* ORNO_MODBUS_H_ */
