#ifndef EVSE_MANAGER_H
#define EVSE_MANAGER_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>

/**
 * @brief Inicializa os módulos internos do EVSE (hardware, estado, erros, etc.)
 * e inicia a tarefa de supervisão periódica (tick).
 */
void evse_manager_init(void);

/**
 * @brief Inicia a tarefa que processa eventos de autenticação recebidos via fila.
 *
 * @param queue Fila de eventos do tipo auth_event_t enviada pelo módulo auth.
 */
void evse_manager_start(QueueHandle_t queue);

/**
 * @brief Executa uma iteração do ciclo de controle do EVSE.
 *
 * Esta função é chamada automaticamente pela task periódica,
 * mas pode ser chamada manualmente em testes.
 */
void evse_manager_tick(void);

/**
 * @brief Verifica se o EVSE está disponível para uso.
 *
 * Isso considera falhas críticas, disponibilidade configurada, etc.
 */
bool evse_manager_is_available(void);

/**
 * @brief Define se o EVSE deve estar disponível (ex: via controle remoto).
 */
void evse_manager_set_available(bool available);

/**
 * @brief Define se o EVSE está autorizado a carregar (ex: após autenticação).
 */
void evse_manager_set_authorized(bool authorized);

/**
 * @brief Verifica se o EVSE está atualmente carregando.
 */
bool evse_manager_is_charging(void);

/**
 * @brief Ativa ou desativa logicamente o EVSE (controla habilitação geral).
 */
void evse_manager_set_enabled(bool enabled);

/**
 * @brief Verifica se o EVSE está ativado logicamente.
 */
bool evse_manager_is_enabled(void);

#ifdef __cplusplus
}
#endif

#endif // EVSE_MANAGER_H
