/*
 * evse_session.h
 * Module to track and retrieve charging session data (current or last completed),
 * accumulating energy via periodic tick of instantaneous power.
 */

#ifndef EVSE_SESSION_H
#define EVSE_SESSION_H

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

/**
 * @brief Charging session statistics
 */
typedef struct {
    TickType_t start_tick;   ///< tick when session began
    uint32_t    duration_s;  ///< total duration in seconds
    uint32_t    energy_wh;   ///< total energy consumed in Wh
    uint32_t    avg_power_w; ///< average power in W
    bool        is_current;  ///< true if session still in progress
} evse_session_t;

/**
 * @brief Initialize the session module
 */
void evse_session_init(void);

/**
 * @brief Mark the beginning of a charging session
 */
void evse_session_start(void);

/**
 * @brief Mark the end of the charging session and store it as "last session"
 */
void evse_session_end(void);

/**
 * @brief Periodic tick: must be called (e.g., each 1s) to accumulate energy from instant power
 */
void evse_session_tick(void);

/**
 * @brief Retrieve statistics of either the current ongoing session (if any) or
 *        the last completed session.
 * @param out pointer to evse_session_t to be filled
 * @return true if there is a current or last session available, false otherwise
 */
bool evse_session_get(evse_session_t *out);

#endif // EVSE_SESSION_H
