//
// Created by xajhu on 2021/6/30 0030.
//

#ifndef DAEMON_AGENT_INCLUDE_USER_ERRNO_H
#define DAEMON_AGENT_INCLUDE_USER_ERRNO_H
#ifdef __cplusplus
extern "C" {
#endif

#define DEF_ERR_CODE(ERR_CODE)                                      \
    ERR_CODE(ERR_SUCCESS, 0, "成功")                                \
    ERR_CODE(ERR_INPUT_PARAMS, 1, "输入参数错误")                   \
    ERR_CODE(ERR_UN_SUPPORT, 2, "不支持的操作")                     \
    ERR_CODE(ERR_CALL_SHELL, 3, "调用Shell命令失败")                \
    ERR_CODE(ERR_ITEM_EXISTS, 4, "该内容已经存在")                  \
    ERR_CODE(ERR_ITEM_UNEXISTS, 5, "该内容不存在")                  \
    ERR_CODE(ERR_SYS_INIT, 6, "系统中断")                           \
    ERR_CODE(ERR_OPEN_FILE, 7, "打开文件失败")                      \
    ERR_CODE(ERR_READ_FILE, 8, "读取文件失败")                      \
    ERR_CODE(ERR_FILE_NOT_EXISTS, 9, "文件不存在")                  \
    ERR_CODE(ERR_FILE_LOCKED, 10, "文件被锁定")                     \
    ERR_CODE(ERR_GET_FILE_SIZE, 11, "获取文件大小失败")             \
    ERR_CODE(ERR_COPY_FILE, 12, "复制文件失败")                     \
    ERR_CODE(ERR_MALLOC_MEMORY, 13, "分配内存失败")                 \
    ERR_CODE(ERR_EVP_KEY_SIZE, 14, "秘钥大小不正确")                \
    ERR_CODE(ERR_UNSUP_EVP_TYPE, 15, "不支持的加解密算法")          \
    ERR_CODE(ERR_EVP_INIT_KEY, 16, "初始化秘钥失败")                \
    ERR_CODE(ERR_EVP_UPDATE, 17, "加解密数据失败")                  \
    ERR_CODE(ERR_EVP_FINALE, 18, "错误的加解密结果")                \
    ERR_CODE(ERR_EVP_CREATE_CTX, 19, "初始化加解密失败")            \
    ERR_CODE(ERR_AES_KEYGEN, 20, "AES秘钥失败")                     \
    ERR_CODE(ERR_EVP_ENCRYPTION, 21, "加密失败")                    \
    ERR_CODE(ERR_EVP_DECRYPTION, 22, "解密失败")                    \
    ERR_CODE(ERR_CONFIG_INIT, 23, "配置文件初始化失败")             \
    ERR_CODE(ERR_UNCOMPATIBILITY_TYPE, 24, "未兼容的类型")          \
    ERR_CODE(ERR_STRING_TO_NUMBER, 25, "字符串转数字失败")          \
    ERR_CODE(ERR_UNKNOWN_CFG_ID, 26, "未识别的配置项")              \
    ERR_CODE(ERR_ZLOG_INIT, 27, "日志系统初始化失败")               \
    ERR_CODE(ERR_SYS_GET_CPU_INFO, 28, "获取CPU信息失败")           \
    ERR_CODE(ERR_SYS_NOT_FOUND_CPU, 29, "找不到CPU信息")            \
    ERR_CODE(ERR_SYS_DISK_GET_INFO, 30, "获取磁盘空间占用信息失败") \
    ERR_CODE(ERR_SYS_IPMI_UNSUP, 31, "服务器IPMI接口不支持")        \
    ERR_CODE(ERR_SYS_SENSOR_GET_INFO, 32, "获取传感器信息失败")     \
    ERR_CODE(ERR_DB_CONNECT, 33, "数据库连接失败")                  \
    ERR_CODE(ERR_MQ_CREATE_MQ, 34, "创建消息队列失败")              \
    ERR_CODE(ERR_MQ_CREATE_REP, 35, "创建REP消息队列失败")          \
    ERR_CODE(ERR_MQ_BIND_SOCKET, 36, "消息队列BIND Socket失败")     \
    ERR_CODE(ERR_MQ_CONN_SERVER, 37, "消息队列连接服务器失败")      \
    ERR_CODE(ERR_MQ_SEND_MSG, 38, "消息队列发送消息失败")           \
    ERR_CODE(ERR_JSON_CREAT_OBJ, 39, "创建JSON对象失败")            \
    ERR_CODE(ERR_JSON_PARSE_OBJ, 40, "解析JSON对象失败")            \
    ERR_CODE(ERR_JSON_VALID_SCH, 41, "JSON数据验证失败")            \
    ERR_CODE(ERR_CREATE_NETIF, 42, "创建网络接口失败")              \
    ERR_CODE(ERR_CREATE_PPPOE_NETIF, 43, "创建PPPoE网络接口失败")   \
    ERR_CODE(ERR_CREATE_PPP_SESSION, 44, "创建PPP连接失败")         \
    ERR_CODE(ERR_MISC_GET_IPADDR, 45, "获取网卡IP地址失败")         \
    ERR_CODE(ERR_MISC_GET_NETMASK, 46, "获取网卡子网掩码失败")      \
    ERR_CODE(ERR_MISC_GET_GATEWAY, 47, "获取网卡网关地址失败")      \
    ERR_CODE(ERR_MISC_GET_MACADDR, 48, "获取网卡MAC地址失败")       \
    ERR_CODE(ERR_MENU_EXIT, 49, "菜单执行完后自动退出")             \
    ERR_CODE(ERR_HTTP_UNSUP_METHOD, 50, "不支持的 HTTP 请求方法")   \
    ERR_CODE(ERR_HTTP_UNSUP_PAGE, 51, "找不到 HTTP 服务")           \
    ERR_CODE(ERR_PROTO_DECODE, 52, "HTTP 协议解析失败")                   \
    ERR_CODE(ERR_MSG_CONTENT, 53, "msgContent内容不正确")
#define GENERATE_ENUM(ENUM, no, x) ENUM,

typedef enum {
    DEF_ERR_CODE(GENERATE_ENUM)
} USER_ERRNO;

//typedef enum {
//    ERR_SUCCESS       = 0,
//    ERR_INPUT_PARAMS  = 1,
//    ERR_UN_SUPPORT    = 3,
//    ERR_CALL_SHELL    = 4,
//    ERR_ITEM_EXISTS   = 5,
//    ERR_ITEM_UNEXISTS = 6,
//    ERR_SYS_INIT      = 7,
//
//    // 文件读取相关错误
//    ERR_OPEN_FILE       = 100,
//    ERR_READ_FILE       = 101,
//    ERR_FILE_NOT_EXISTS = 102,
//    ERR_GET_FILE_SIZE   = 103,
//    ERR_COPY_FILE       = 104,
//
//    // 内存相关错误
//    ERR_MALLOC_MEMORY = 200,
//
//    // SSL EVP 加解密相关错误
//    ERR_EVP_KEY_SIZE   = 200,
//    ERR_UNSUP_EVP_TYPE = 201,
//    ERR_EVP_INIT_KEY   = 202,
//    ERR_EVP_UPDATE     = 203,
//    ERR_EVP_FINALE     = 204,
//    ERR_EVP_CREATE_CTX = 205,
//    ERR_AES128_KEYGEN  = 206,
//    ERR_EVP_ENCRYPTION = 207,
//    ERR_EVP_DECRYPTION = 208,
//
//    // 业务相关错误
//    // 配置相关业务
//    ERR_CONFIG_INIT          = 1000,
//    ERR_UNCOMPATIBILITY_TYPE = 1001,
//    ERR_STRING_TO_NUMBER     = 1002,
//    ERR_UNKNOWN_CFG_ID       = 1003,
//
//    // 日志系统相关业务
//    ERR_ZLOG_INIT = 2001,
//
//    // 硬件信息相关业务
//    ERR_SYS_GET_CPU_INFO    = 2100,
//    ERR_SYS_NOT_FOUND_CPU   = 2101,
//    ERR_SYS_DISK_GET_INFO   = 2102,
//    ERR_SYS_IPMI_UNSUP      = 2103,
//    ERR_SYS_SENSOR_GET_INFO = 2104,
//
//    // 数据库相关业务
//    ERR_DB_CONNECT = 2200,
//
//    // 消息队列相关错误
//    ERR_MQ_CREATE_MQ   = 2300,
//    ERR_MQ_CREATE_REP  = 2301,
//    ERR_MQ_BIND_SOCKET = 2302,
//    ERR_MQ_CONN_SERVER = 2304,
//    ERR_MQ_SEND_MSG    = 2305,
//
//    // JSON 序列化相关错误
//    ERR_JSON_CREAT_OBJ = 2400,
//
//    // PPPoE 相关
//    ERR_CREATE_NETIF       = 2500,
//    ERR_CREATE_PPPOE_NETIF = 2501,
//    ERR_CREATE_PPP_SESSION = 2502,
//
//    // MISC 相关
//    ERR_MISC_GET_IPADDR  = 2600,
//    ERR_MISC_GET_NETMASK = 2601,
//    ERR_MISC_GET_GATEWAY = 2602,
//    ERR_MISC_GET_MACADDR = 2603,
//
//    // 菜单相关功能
//    ERR_MENU_EXIT = 2700,
//
//} USER_ERRNO;

const char *getErrorEnumString(int errCode);
const char *getErrorEnumDesc(int errCode);
#ifdef __cplusplus
}
#endif
#endif    //DAEMON_AGENT_INCLUDE_USER_ERRNO_H