#ifndef EVSE_FSM_H
#define EVSE_FSM_H

#include <stdint.h>
#include <stdbool.h>
#include "evse_api.h"
#include "evse_pilot.h"
#include "freertos/FreeRTOS.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Reinicia a máquina de estados do EVSE para o estado inicial (A).
 */
void evse_fsm_reset(void);

/**
 * @brief Processa uma leitura do sinal de piloto e atualiza a máquina de estados do EVSE.
 *
 * Esta função deve ser chamada periodicamente pelo núcleo de controle para
 * avaliar mudanças no estado do conector, disponibilidade do carregador e
 * autorização do usuário.
 *
 * @param pilot_voltage Leitura atual da tensão do sinal piloto.
 * @param authorized    Indica se o carregamento foi autorizado.
 * @param available     Indica se o carregador está disponível (ex: sem falhas).
 * @param enabled       Indica se o carregador está habilitado via software.
 */
void evse_fsm_process(pilot_voltage_t pilot_voltage, bool authorized, bool available, bool enabled);

#ifdef __cplusplus
}
#endif

#endif // EVSE_FSM_H
