#ifndef EVSE_SESSION_H
#define EVSE_SESSION_H

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

/**
 * @brief Charging session statistics
 */
typedef struct {
    TickType_t start_tick;                  ///< tick when session began (debug/trace)
    uint32_t   session_id;                  ///< monotonically increasing session identifier
    char       tag[AUTH_TAG_MAX_LEN];       ///< RFID/auth tag associated with this session, empty if none
    uint32_t   duration_s;                  ///< total duration in seconds (tempo real)
    uint32_t   energy_wh;                   ///< total energy consumed in Wh (tempo real)
    uint32_t   avg_power_w;                 ///< average power in W
    bool       is_current;                  ///< true if session still in progress
} evse_session_t;

void evse_session_init(void);

/**
 * @brief Stores the tag that authorized the next charging session.
 *
 * The tag is copied into the session when evse_session_start() is called.
 * Passing NULL or an empty string clears the pending tag.
 */
void evse_session_set_authorized_tag(const char *tag);
void evse_session_clear_authorized_tag(void);

void evse_session_start(void);
void evse_session_end(void);

/**
 * @brief Periodic tick: called (e.g., each 1s) to accumulate energy from instant power.
 * Implementação usa esp_timer (não assume 1s exato).
 */
void evse_session_tick(void);

bool evse_session_get(evse_session_t *out);

#endif // EVSE_SESSION_H
