#ifndef _DATA_CONFIG_H
#define _DATA_CONFIG_H


/* ==================================================================================================================== */
/* 数据层布尔类型定义 - 避免与底层bool/boolean类型冲突 */
/* ==================================================================================================================== */

/**
 * @brief 数据层布尔类型枚举
 * @note  使用枚举替代stdbool.h的bool类型，避免与底层驱动的boolean类型冲突
 *        底层存储为uint8_t，确保内存占用最小化
 */
typedef enum {
    DATA_BOOL_FALSE = 0,    /* 假/失败/关闭 */
    DATA_BOOL_TRUE  = 1      /* 真/成功/开启 */
} data_bool_t;

/* 布尔值检查宏 - 提高代码可读性 */
#define DATA_BOOL_IS_TRUE(x)   ((x) != DATA_BOOL_FALSE)
#define DATA_BOOL_IS_FALSE(x)  ((x) == DATA_BOOL_FALSE)

/* ==================================================================================================================== */

#include "menu/Manu_str.h"
#include "menu/Manu_usr_str.h"

#include "bsp_type.h"
#include "head.h"
#include "MmiData.h"

#define BYTE0(l) ((uint8_t)(l))
#define BYTE1(l) ((uint8_t)(((l) >> 8) & 0xFF))
#define BYTE2(l) ((uint8_t)(((l) >> 16) & 0xFF))
#define BYTE3(l) ((uint8_t)(((l) >> 24) & 0xFF))

/***** 菜单枚举定义 *****/
typedef enum {
    E_FV_DP = 0,       /* 设备参数 */
    E_FV_COM,          /* 端口通信参数 */
    E_FV_PCP,          /* 规约通讯参数 */
    E_FV_CON,           /* 常规保护 */
    E_FV_FA,           /* 常规FA */
    E_FV_RC,           /* 重合闸 */
    E_FV_FDL,          /* 非电量参数 */
    E_FV_TQ,           /* 同期合闸 */
    E_FV_AS,           /* 自动解列 */
    E_FV_YX,           /* 遥测越限 */
    E_FV_XLGA,         /* 线路告警 */
    E_FV_LCD,          /* 小电流接地 */
    // E_FV_KZHL,         /* 控制回路 */
    // E_FV_SRA,          /* 开关拒动 */
    E_FV_ZDFG,         /* 自动复归 */
    E_FV_FR,           /* 故障录波 */
    E_FV_CHKG,         /* 传动开关 */
    // E_FV_SB,           /* 软压板 */
    E_FV_FS,           /* 功能软压板 */
    E_FV_YXSB          /* 运行软压板 */
} E_FV_MENU;


typedef enum
{
    WORKMODE_NONE = 0, /* 无工作模式 */
    WORKMODE_GEN,    /* 常规 */
    WORKMODE_FA,     /* FA */
    WORKMODE_DFA,    /* 智能分布式 */
    WORKMODE_CEN,    /* 集中式 */
#if 0
    WORKMODE_SC,     /* 同期合闸 */
    WORKMODE_AL,     /* 自动解列 */
    WORKMODE_CEG,    /* 小电流接地 */
    WORKMODE_BLA,    /* 断线告警 */
    WORKMODE_PFD,    /* 不停电传动 */
#endif
    WORKMODE_MAX
} E_FUN_MODE; /* 功能模式 */

typedef struct datafixval_des
{
    uint16_t us_addr;   /* 地址索引 */
    uint8_t  uc_type;   /* 定值类型 */
    union
    {
        float f_val_set;     /* 当前值 */
        uint32_t ul_val_set; /* 当前值 */
    };
    union
    {
        float f_val_bak;    /* 备份值 */
        uint32_t ul_val_bak; /* 备份值 */
    };
    float f_val_step;   /* 步长 */
} t_datafixval_cfg; /* 定值索引结构 */

typedef struct datafixval_cfg_total
{
    t_datafixval_cfg*   fs;     /* 定值 */
    uint16_t            us_val; /* 个数 */
    char                des[32];/* 描述 */
} t_datafixval_cfg_total; /* 总体定值配置 */

// 按功能模块分组
typedef enum {
    MODULE_DEV_SET,         // 装置参数数据
    MODULE_DEV_FIX,         // 定值整定数据
    MODULE_DEV_SET_SHOW,    // 装置参数查看数据
    MODULE_DEV_FIX_SHOW,    // 定值查看数据
    MODULE_END,             // 结束
    // ...
} DataModule;

/* ==================================================================================================================== */
/* 数据层独立时间结构体定义 - 用于解耦数据层与UI层 */
/* ==================================================================================================================== */

/**
 * @brief 数据层时间结构体定义
 * @note  该结构体与UI层的datetime_value_t保持一致，但定义在数据层以避免层间耦合
 *       数据流向: UI层 -> data_manager.c (转换) -> data_debugset.c
 */
typedef struct {
    uint16_t year;    // 年: 2000-2099
    uint8_t month;    // 月: 1-12
    uint8_t day;      // 日: 1-31
    uint8_t hour;     // 时: 0-23
    uint8_t minute;   // 分: 0-59
    uint8_t second;   // 秒: 0-59
} data_datetime_t;

#endif