/*
 * state_manager.h
 *
 *  Created on: 2026-03-04
 *      Author: RT-Thread
 *
 *  功能: 状态管理模块头文件
 *  依赖: RT-Thread Nano, osal
 *  跨平台适配: 基于RT-Thread Nano，使用标准API
 */

#ifndef STATE_MANAGER_H
#define STATE_MANAGER_H

#include <rtthread.h>
#include "osal.h"

/* 网络状态定义 */
typedef enum {
    NETWORK_STATE_DISCONNECTED = 0,
    NETWORK_STATE_CONNECTING,
    NETWORK_STATE_CONNECTED,
    NETWORK_STATE_ERROR
} network_state_t;

/* 传感器状态定义 */
typedef enum {
    SENSOR_STATE_IDLE = 0,
    SENSOR_STATE_READING,
    SENSOR_STATE_READY,
    SENSOR_STATE_ERROR
} sensor_state_t;

/* TCP状态定义 */
typedef enum {
    TCP_STATE_CLOSED = 0,
    TCP_STATE_LISTENING,
    TCP_STATE_CONNECTED,
    TCP_STATE_ERROR
} tcp_state_t;

/* 错误代码定义 */
typedef enum {
    ERROR_NONE = 0,
    ERROR_NETWORK,
    ERROR_SENSOR,
    ERROR_TCP,
    ERROR_UNKNOWN
} error_code_t;

/* 系统状态结构体 */
typedef struct {
    network_state_t network_state; /* 网络状态 */
    sensor_state_t sensor_state;   /* 传感器状态 */
    tcp_state_t tcp_state;         /* TCP状态 */
    error_code_t error_code;       /* 错误代码 */
} system_state_t;

/* 状态快照结构体 */
typedef struct {
    system_state_t system_state; /* 系统状态 */
    rt_tick_t timestamp;        /* 时间戳 */
} state_snapshot_t;

/**
 * @brief 初始化状态管理
 * @return 0 成功，非0 失败
 */
int state_manager_init(void);

/**
 * @brief 获取系统状态
 * @param state 系统状态指针
 * @return 0 成功，非0 失败
 */
int state_manager_get_system_state(system_state_t *state);

/**
 * @brief 设置网络状态
 * @param state 网络状态
 * @return 0 成功，非0 失败
 */
int state_manager_set_network_state(network_state_t state);

/**
 * @brief 设置传感器状态
 * @param state 传感器状态
 * @return 0 成功，非0 失败
 */
int state_manager_set_sensor_state(sensor_state_t state);

/**
 * @brief 设置TCP状态
 * @param state TCP状态
 * @return 0 成功，非0 失败
 */
int state_manager_set_tcp_state(tcp_state_t state);

/**
 * @brief 设置错误代码
 * @param error 错误代码
 * @return 0 成功，非0 失败
 */
int state_manager_set_error_code(error_code_t error);

/**
 * @brief 创建状态快照
 * @param snapshot 状态快照指针
 * @return 0 成功，非0 失败
 */
int state_manager_create_snapshot(state_snapshot_t *snapshot);

/**
 * @brief 恢复状态快照
 * @param snapshot 状态快照指针
 * @return 0 成功，非0 失败
 */
int state_manager_restore_snapshot(state_snapshot_t *snapshot);

#endif /* STATE_MANAGER_H */
