/*
 * Copyright (c) 2026 Martin Javier Klöckner <mklockner@fi.uba.ar>
 *
 * All rights reserved
 *
 * See file `LICENSE` for full details
 */

#ifndef TASK_INC_TASK_MENU_ATTRIBUTE_H_
#define TASK_INC_TASK_MENU_ATTRIBUTE_H_

#ifdef __cplusplus
extern "C" {
#endif

/*
* Menu Statechart - State Transition Table
* 
* +----------------+-------+---------+-------------+---------+
* | Current State  | Event | [Guard] | Next State  | Actions |
* +----------------+-------+---------+-------------+---------+
* |                |       |         |             |         |
* | ST_MEN_IDLE    |       |         | ST_MEN_IDLE |         |
* |                |       |         |             |         |
* +----------------+-------+---------+-------------+---------+
*/

typedef enum {
    EV_MEN_ST_IDLE,
    EV_MEN_ST_CLOCK_SET,
    EV_MEN_ST_TEMP_SET,
    EV_MEN_ST_TIMER_SET_STATUS,
    EV_MEN_ST_TIMER_SET_START,
    EV_MEN_ST_TIMER_SET_END,
    EV_MEN_DISPLAY_UPDATE,
    EV_MEN_INACTIVE_TIMEOUT
} task_menu_ev_t;

typedef enum {
    ST_MEN_IDLE,
    ST_MEN_CLOCK_SET,
    ST_MEN_TEMP_SET,
    ST_MEN_TIMER_SET_STATUS,
    ST_MEN_TIMER_SET_START,
    ST_MEN_TIMER_SET_END,
} task_menu_st_t;

typedef struct {
    uint32_t tick;
    task_menu_st_t state;
    task_menu_ev_t event;
    bool event_flag;
} task_menu_dta_t;

#ifdef __cplusplus
}
#endif

#endif /* TASK_INC_TASK_MENU_ATTRIBUTE_H_ */
